zoukankan      html  css  js  c++  java
  • redis使用基础(一)

    简介:开源免费,高性能key-value型,非关系型数据库。

    特点:持久化(将内存中的数据加载到磁盘中,重启时可以再次加载并使用)

            数据备份(master-slave模式数据备份)

    相对于关系型数据库的优势:

    性能极高:每秒可读数据110000次/s,写速度81000次/s。

    丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

    原子性:无论单个,还是多个,要么执行成功,要么全部失败。事务性通过MULTI和EXEC指令包起来。

    丰富的特性 :Redis还支持 publish/subscribe, 通知, key 过期等等特性

    基本的数据结构(5类):

    • String: 字符串   最大存储512M
    • Hash: 散列
    • List: 列表
    • Set: 集合
    • Sorted Set: 有序集合

    1、查看基本信息

    INFO

    2、查看缓存键

    keys  *

    3、查看key的类型

    type yourkey

    redis配置:获取所有配置项(config get *)

                       编辑配置项(config set 配置名  新名字)

    string存储

    127.0.0.1:6379> set name "baomei"
    OK
    127.0.0.1:6379> get name
    "baomei"
    127.0.0.1:6379>strlen name     返回字符串长度,不存在的key长度为0
    6
    127.0.0.1:6379> set name 10
    OK
    127.0.0.1:6379> decr name       将数字长度减一
    (integer) 9
    127.0.0.1:6379> exists count     对不存在的key减一结果为-1
    (integer) 0
    127.0.0.1:6379> decr count
    (integer) -1
    127.0.0.1:6379> append name 000     在字符串末尾追加指定字符串
    (integer) 4
    127.0.0.1:6379> get name
    "9000"
    127.0.0.1:6379> decrby name 1000      减去指定长度的值
    (integer) 8000
    127.0.0.1:6379> incr name            将数字加一
    (integer) 8001
    127.0.0.1:6379> MSET key1 "Hello" key2 "World"    同时存放多个键值对
    OK
    redis 127.0.0.1:6379> GET key1
    "Hello"
    redis 127.0.0.1:6379> GET key2
    "World"

    hash存储,每个 hash 可以存储 2^32 -1 键值对(40多亿) -----hmset   hget

    127.0.0.1:6379> del name
    (integer) 1
    127.0.0.1:6379> hmset name filed1 "baomei1" filed2 "baomei2"
    OK
    127.0.0.1:6379> hget filed1
    (error) ERR wrong number of arguments for 'hget' command
    127.0.0.1:6379> hget name filed1
    "baomei1"
    127.0.0.1:6379> hget name filed2
    "baomei2"
    127.0.0.1:6379>hdel name filed1          删除hash中的某一字段值
    (integer) 1
    
    

    列表存储,支持添加重复元素。按插入顺序排序,也可以插入一个数到某个元素的前面或者后面,注意,redis的列表存储类似于数据结构栈模型。

    列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)

    127.0.0.1:6379> del name           删除键
    (integer) 1
    127.0.0.1:6379> lpush name redis      向列表中存值
    (integer) 1
    127.0.0.1:6379> lpush name mysql
    (integer) 2
    127.0.0.1:6379> lpush name mongdb
    (integer) 3
    127.0.0.1:6379> lrange name 0 10         遍历输出列表
    1) "mongdb"
    2) "mysql"
    3) "redis" 
    127.0.0.1:6379> llen name              求列表长度
    (integer) 3
    127.0.0.1:6379> lindex name 0           求列表中0号角标的元素值
    "mongdb"
    127.0.0.1:6379> lindex name 1
    "mysql"
    127.0.0.1:6379> linsert name before  mysql baomei     在某元素位置前插入元素
    (integer) 4
    127.0.0.1:6379> lrange 0 -1
    (error) ERR wrong number of arguments for 'lrange' command
    127.0.0.1:6379> lrange name 0 -1
    1) "mongdb"
    2) "baomei"
    3) "mysql"
    4) "redis"
    127.0.0.1:6379> lpop name              删除最左边元素,最后插入的一方为左边
    "mongdb"
    127.0.0.1:6379> lrange name 0 -1
    1) "baomei"
    2) "mysql"
    3) "redis"
    127.0.0.1:6379> rpop name             删除最右边元素
    "redis"
    127.0.0.1:6379> lrange name 0 -1
    1) "baomei"
    2) "mysql"
    127.0.0.1:6379> lpush name oracle
    (integer) 3
    127.0.0.1:6379> lrem  name 1 oracle          删除元素
    (integer) 1
    127.0.0.1:6379> lrange 0 -1
    (error) ERR wrong number of arguments for 'lrange' command
    127.0.0.1:6379> lrange name 0 -1
    1) "baomei"
    2) "mysql"
    127.0.0.1:6379> rpush name baomei
    (integer) 3
    127.0.0.1:6379> lrem name 2 baomei          删除多个
    (integer) 2
    127.0.0.1:6379> lrange name 0 -1
    1) "mysql"
    127.0.0.1:6379>
    

    set集合,Set 是 string 类型的无序集合。

    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

    添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0,不支持添加重复元素

    127.0.0.1:6379> del name
    (integer) 1
    127.0.0.1:6379> sadd name redis
    (integer) 1
    127.0.0.1:6379> sadd name mysql
    (integer) 1
    127.0.0.1:6379> sadd name oracle
    (integer) 1
    127.0.0.1:6379> sadd name oracle
    (integer) 0
    127.0.0.1:6379> smembers name
    1) "mysql"
    2) "oracle"
    3) "redis"
    127.0.0.1:6379>
    

    zset有序集合,Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    zset的成员是唯一的,但分数(score)却可以重复。

    127.0.0.1:6379> del name
    (integer) 1
    127.0.0.1:6379> zadd name 0 redis
    (integer) 1
    127.0.0.1:6379> zadd name 0 mysql
    (integer) 1
    127.0.0.1:6379> zadd name 0 oracle
    (integer) 1
    127.0.0.1:6379> zadd name 1 baomei
    (integer) 1
    127.0.0.1:6379> zadd name 1 mysql
    (integer) 0
    127.0.0.1:6379> zadd name 1 baojuan
    (integer) 1
    127.0.0.1:6379> zrangebyscore name 0 10
    1) "oracle"
    2) "redis"
    3) "baojuan"
    4) "baomei"
    5) "mysql"
    127.0.0.1:6379> zrangebyscore name 1 10
    1) "baojuan"
    2) "baomei"
    3) "mysql"
    127.0.0.1:6379> zrangebyscore name 2 10
    (empty list or set)
    127.0.0.1:6379>

      redis消息订阅系统,右边为发送者,左边为订阅者。

            redis事务机制不具有原子性,   如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。

    redis 127.0.0.1:7000> multi
    OK
    redis 127.0.0.1:7000> set a aaa
    QUEUED
    redis 127.0.0.1:7000> set b bbb
    QUEUED
    redis 127.0.0.1:7000> set c ccc
    QUEUED
    redis 127.0.0.1:7000> exec
    1) OK
    2) OK
    3) OK

     redis脚本使用

    127.0.0.1:6379>  EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
    1) "key1"
    2) "key2"
    3) "first"
    4) "second"
  • 相关阅读:
    【转载】C++指针随想
    微信小程序实现电子签名
    js数组常用方法
    css文本两端对齐
    js判断某个数组中是否包含另一个数组
    react 限制小数点位数
    原生js 操作class 原生js获取父元素
    转发: JS中的call()和apply()方法和区别 --小白变色记
    fail2Ban ubuntu
    VSCode 搭建 Vue项目 lite-server
  • 原文地址:https://www.cnblogs.com/aasu/p/11775011.html
Copyright © 2011-2022 走看看