zoukankan      html  css  js  c++  java
  • Redis数据类型

    一、数据类型

    String: 字符串类型
    Hash: 哈希类型
    List: 列表类型
    Set: 集合类型
    Sorted set: 有序集合类型
    

    1.String: 字符串类型

    1)添加数据

    #语法
    127.0.0.1:6379> set key value [EX seconds] [PX milliseconds] [NX|XX]
    			  设置  键  值    生存时间(秒)  生存时间(毫秒)  如果不存在|如果存在
    
    #添加key
    127.0.0.1:6379> set k4 v4
    OK
    
    #添加多个key
    127.0.0.1:6379> mset k5 v5 k6 v6 k7 v7 k8 v8
    OK
    
    #先查看再添加
    127.0.0.1:6379> GETSET niulei sui
    "cjdsb"
    127.0.0.1:6379> get niulei
    "sui"
    
    #添加key同时设置生存时间
    127.0.0.1:6379> set qiudao dsb ex 10
    OK
    
    #计数器增加值
    127.0.0.1:6379> set good 1
    OK
    127.0.0.1:6379> get good
    "1"
    127.0.0.1:6379> INCR good
    (integer) 2
    127.0.0.1:6379> INCR good
    (integer) 3
    
    #计数器减少值
    127.0.0.1:6379> DECR good
    (integer) 2
    127.0.0.1:6379> DECR good
    (integer) 1
    127.0.0.1:6379> DECR good
    (integer) 0
    
    #计数器增加指定值
    127.0.0.1:6379> INCRBY good 100
    (integer) 100
    127.0.0.1:6379> INCRBY good 100
    (integer) 200
    127.0.0.1:6379> INCRBY good 100
    (integer) 300
    127.0.0.1:6379> INCRBY good 100
    (integer) 400
    127.0.0.1:6379> INCRBY good 100
    (integer) 500
    127.0.0.1:6379> get good
    "500"
    
    #计数器减少指定值
    127.0.0.1:6379> DECRBY good 100
    (integer) 400
    127.0.0.1:6379> DECRBY good 100
    (integer) 300
    127.0.0.1:6379> DECRBY good 100
    (integer) 200
    127.0.0.1:6379> DECRBY good 100
    (integer) 100
    127.0.0.1:6379> get good
    "100"
    
    #计数器增加指定小数
    127.0.0.1:6379> set good 8
    OK
    127.0.0.1:6379> get good
    "8"
    127.0.0.1:6379> INCRBYFLOAT good 0.1
    "8.1"
    127.0.0.1:6379> INCRBYFLOAT good 0.1
    "8.2"
    127.0.0.1:6379> INCRBYFLOAT good 0.1
    "8.3"
    127.0.0.1:6379> INCRBYFLOAT good 0.1
    "8.4"
    
    #计数器减少指定小数
    127.0.0.1:6379> INCRBYFLOAT good -0.1
    "8.3"
    127.0.0.1:6379> INCRBYFLOAT good -0.1
    "8.2"
    127.0.0.1:6379> INCRBYFLOAT good -0.1
    "8.1"
    127.0.0.1:6379> INCRBYFLOAT good -0.1
    "8"
    

    2)查询数据

    #查看key
    127.0.0.1:6379> get k1
    "qwrwjgefdlksdfjlbasklgfns"
    
    #查看数据长度
    127.0.0.1:6379> TYPE k1
    string
    127.0.0.1:6379> STRLEN k1
    (integer) 25
    
    #查看指定位置的数据
    127.0.0.1:6379> GETRANGE k1 0 3
    "qwrw"
    127.0.0.1:6379> GETRANGE k1 0 0
    "q"
    
    #查看多个key的值
    127.0.0.1:6379> mget k1 k2 k3 k4
    1) "qwrwjgefdlksdfjlbasklgfns"
    2) "v2"
    3) "v3"
    4) "v4"
    

    3)删除数据

    #删除key
    127.0.0.1:6379> del k1
    (integer) 1
    
    #删除多个key
    127.0.0.1:6379> del k2 k3 k4
    (integer) 3
    

    4)修改数据

    #修改数据
    127.0.0.1:6379> get k4
    "v4"
    127.0.0.1:6379> set k4 v444444
    OK
    127.0.0.1:6379> get k4
    "v444444"
    
    #追加数据
    127.0.0.1:6379> APPEND k4 append
    (integer) 13
    127.0.0.1:6379> get k4
    "v444444append"
    
    #修改指定位置的数据
    127.0.0.1:6379> get k4
    "v444444append"
    127.0.0.1:6379> GETRANGE k4 4 4
    "4"
    127.0.0.1:6379> SETRANGE k4 4 0
    (integer) 13
    127.0.0.1:6379> get k4
    "v444044append"
    

    2.Hash: 哈希类型

    1)添加数据

    #语法
    127.0.0.1:6379> hset key field value
    			   设置  键   列    值
    
    #添加一个key的一个列
    127.0.0.1:6379> hset teacher name qiudao
    (integer) 1
    
    #添加多个列
    127.0.0.1:6379> hmset teacher id 1 age 78 sex nv 
    OK
    

    2)查看数据

    #查看key的一列值
    127.0.0.1:6379> hget teacher name
    "qiudao"
    127.0.0.1:6379> hget teacher sex
    "nv"
    127.0.0.1:6379> hget teacher age
    "78"
    
    #查看所有列的值
    127.0.0.1:6379> hgetall teacher
    1) "name"
    2) "qiudao"
    3) "id"
    4) "1"
    5) "age"
    6) "78"
    7) "sex"
    8) "nv"
    

    3)修改数据

    #添加列
    127.0.0.1:6379> hset teacher money -100000
    (integer) 1
    127.0.0.1:6379> hgetall teacher
     1) "name"
     2) "qiudao"
     3) "id"
     4) "1"
     5) "age"
     6) "78"
     7) "sex"
     8) "nv"
     9) "money"
    10) "-100000"
    
    #修改指定列的值
    127.0.0.1:6379> HSET teacher name congtianqi
    (integer) 0
    127.0.0.1:6379> hgetall teacher
     1) "name"
     2) "congtianqi"
     3) "id"
     4) "1"
     5) "age"
     6) "78"
     7) "sex"
     8) "nv"
     9) "money"
    10) "-100000"
    
    #使用incr
    127.0.0.1:6379> HINCRBY teacher id 1
    (integer) 2
    127.0.0.1:6379> hgetall teacher
     1) "name"
     2) "congtianqi"
     3) "id"
     4) "2"
     5) "age"
     6) "78"
     7) "sex"
     8) "nv"
     9) "money"
    10) "-100000"
    127.0.0.1:6379> HINCRBY teacher money 100000
    (integer) 0
    127.0.0.1:6379> hgetall teacher
     1) "name"
     2) "congtianqi"
     3) "id"
     4) "2"
     5) "age"
     6) "78"
     7) "sex"
     8) "nv"
     9) "money"
    10) "0"
    

    4)删除数据

    #删除指定key的列
    127.0.0.1:6379> HDEL teacher money sex
    (integer) 2
    127.0.0.1:6379> hgetall teacher
    1) "name"
    2) "congtianqi"
    3) "id"
    4) "2"
    5) "age"
    6) "78"
    
    #删除整个key
    127.0.0.1:6379> del teacher
    (integer) 1
    

    3.List: 列表类型

    队列:先进先出
    堆栈:先进后出
    

    1)添加数据

    #添加一个数据(往左侧添加)
    127.0.0.1:6379> LPUSH list qiudao
    (integer) 1
    
    #添加多个数据(往左侧添加)
    127.0.0.1:6379> LPUSH list zengdao niulei lijianpeng
    (integer) 4
    127.0.0.1:6379> LPUSH list liuxinyu
    (integer) 5
    
    #添加多条数据(往右侧添加)
    127.0.0.1:6379> RPUSH list congtianqi
    (integer) 6
    127.0.0.1:6379> RPUSH zhangxin guozongyuan geshaosong
    (integer) 2
    127.0.0.1:6379> RPUSH list zhangxin guozongyuan geshaosong
    

    2)查看数据

    #查看列表所有数据
    127.0.0.1:6379> LRANGE list 0 -1
    1) "liuxinyu"
    2) "lijianpeng"
    3) "niulei"
    4) "zengdao"
    5) "qiudao"
    6) "congtianqi"
    7) "zhangxin"
    8) "guozongyuan"
    9) "geshaosong"
    
    #查看列表类型数据量
    127.0.0.1:6379> type list
    list
    127.0.0.1:6379> LLEN list
    (integer) 9
    
    #查看指定位置的数据
    127.0.0.1:6379> LINDEX list 0
    "liuxinyu"
    127.0.0.1:6379> LINDEX list 1
    "lijianpeng"
    
    #读取队列数据,消费队列数据,消费一条少一条
    1.使用lpush插入数据
    127.0.0.1:6379> LPUSH list liukong
    (integer) 10
    
    2.查看数据
    127.0.0.1:6379> LRANGE list 0 -1
     1) "liukong"
     2) "liuxinyu"
     3) "lijianpeng"
     4) "niulei"
     5) "zengdao"
     6) "qiudao"
     7) "congtianqi"
     8) "zhangxin"
     9) "guozongyuan"
    10) "geshaosong"
    
    3.使用LPOP消费数据
    127.0.0.1:6379> LPOP list
    "liukong"
    127.0.0.1:6379> LPOP list
    "liuxinyu"
    
    4.再次查看数据
    127.0.0.1:6379> LRANGE list 0 -1
    1) "lijianpeng"
    2) "niulei"
    3) "zengdao"
    4) "qiudao"
    5) "congtianqi"
    6) "zhangxin"
    7) "guozongyuan"
    8) "geshaosong"
    
    5.使用RPOP消费数据
    127.0.0.1:6379> RPOP list
    "geshaosong"
    127.0.0.1:6379> RPOP list
    "guozongyuan"
    127.0.0.1:6379> RPOP list
    "zhangxin"
    
    6.再次查看数据
    127.0.0.1:6379> LRANGE list 0 -1
    1) "lijianpeng"
    2) "niulei"
    3) "zengdao"
    4) "qiudao"
    5) "congtianqi"
    
    #总结:
    1.当使用LPUSH插入数据,使用LPOP消费数据时,是堆栈
      当使用RPUSH插入数据,使用RPOP消费数据时,是堆栈
    2.当使用LPUSH插入数据,使用RPOP消费数据时,是队列
      当使用RPUSH插入数据,使用LPOP消费数据时,是队列
    

    3)修改数据

    #修改指定位置的数据
    127.0.0.1:6379> LSET list 2 daijiadong
    OK
    127.0.0.1:6379> LRANGE list 0 -1
    1) "lijianpeng"
    2) "niulei"
    3) "daijiadong"
    4) "qiudao"
    5) "congtianqi"
    
    #将数据插入到列表指定位置
    127.0.0.1:6379> LINSERT list after qiudao banzhang
    (integer) 6
    127.0.0.1:6379> LRANGE list 0 -1
    1) "lijianpeng"
    2) "niulei"
    3) "daijiadong"
    4) "qiudao"
    5) "banzhang"
    6) "congtianqi"
    
    #将列表数据取出插入另一个列表
    127.0.0.1:6379> RPOPLPUSH list list
    "congtianqi"
    127.0.0.1:6379> LRANGE list 0 -1
    1) "congtianqi"
    2) "lijianpeng"
    3) "niulei"
    4) "daijiadong"
    5) "qiudao"
    6) "banzhang"
    127.0.0.1:6379>
    

    4)删除数据

    #删除key
    127.0.0.1:6379> DEL list
    
    #删除指定数量的值(当数量不够时,删除仅有的值)
    127.0.0.1:6379> LRANGE list 0 -1
    1) "congtianqi"
    2) "lijianpeng"
    3) "niulei"
    4) "daijiadong"
    5) "qiudao"
    6) "banzhang"
    
    127.0.0.1:6379> LREM list 2 congtianqi
    (integer) 1
    127.0.0.1:6379> LRANGE list 0 -1
    1) "lijianpeng"
    2) "niulei"
    3) "daijiadong"
    4) "qiudao"
    5) "banzhang"
    
    #从头开始,索引为0,1,2的3个元素,其余全部删除改(反向删除)
    127.0.0.1:6379> ltrim list 0 2
    OK
    127.0.0.1:6379> LRANGE list 0 -1
    1) "lijianpeng"
    2) "niulei"
    3) "daijiadong"
    127.0.0.1:6379>
    

    4.Set: 集合类型

    在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
    

    1)添加数据

    #添加两个集合(集合中设置一样的值没有效果)
    127.0.0.1:6379> sadd set1 1 2 3 5 7
    (integer) 5
    
    127.0.0.1:6379> sadd set2 1 3 5 8 9
    (integer) 5
    

    2)查看数据

    #查看集合的数据
    127.0.0.1:6379> SMEMBERS set1
    1) "1"
    2) "2"
    3) "3"
    4) "5"
    5) "7"
    127.0.0.1:6379> SMEMBERS set2
    1) "1"
    2) "3"
    3) "5"
    4) "8"
    5) "9"
    
    #查看集合中是否有某个值
    127.0.0.1:6379> SISMEMBER set1 1
    (integer) 1
    127.0.0.1:6379> SISMEMBER set1 0
    (integer) 0
    
    #查看集合中的数据量
    127.0.0.1:6379> SCARD set1
    (integer) 5
    
    #获取集合中随机值
    127.0.0.1:6379> SRANDMEMBER set1 1
    1) "2"
    
    #取集合的交集
    127.0.0.1:6379> SINTER set1 set2
    1) "1"
    2) "3"
    3) "5"
    
    #取集合的并集
    127.0.0.1:6379> SUNION set1 set 2
    1) "1"
    2) "2"
    3) "3"
    4) "5"
    5) "7"
    
    #对比集合(取出前者有而后者没有的值)
    127.0.0.1:6379> SDIFF set1 set2
    1) "2"
    2) "7"
    127.0.0.1:6379> SDIFF set2 set1
    1) "8"
    2) "9"
    

    3)修改数据

    #移动集合中的值到另一个集合
    127.0.0.1:6379> SMOVE set1 set2 2
    (integer) 1
    127.0.0.1:6379> SMEMBERS set1
    1) "1"
    2) "3"
    3) "5"
    4) "7"
    127.0.0.1:6379> SMEMBERS set2
    1) "1"
    2) "2"
    3) "3"
    4) "5"
    5) "8"
    6) "9"
    

    4)删除数据

    #尾部数据查询,查询到即删除
    127.0.0.1:6379> SPOP set1
    "7"
    127.0.0.1:6379> SPOP set1 2
    1) "5"
    2) "3"
    127.0.0.1:6379> SMEMBERS set1
    1) "1"
    
    #删除指定值,若值不存在则只删除有的值
    127.0.0.1:6379> SREM set2 1 2 3 5
    (integer) 4
    127.0.0.1:6379> SMEMBERS set2
    1) "8"
    2) "9"
    

    5.有序集合 sorted-set

    应用场景:
    排行榜应用,取TOP N操作
    这个需求与上面需求的不同之处在于,前面操作以时间为权重,这个是以某个条件为权重,比如按顶的次数排序,这时候就需要我们的sorted set出马了,将你要排序的值设置成sorted set的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。
    

    1)添加数据

    #添加一个数据
    127.0.0.1:6379> ZADD linux9 90 banzhang 80 shengwei 50 jiwei 20 tiwei 100 xuewei
    (integer) 5
    

    2)查看数据

    #查看排序后数据
    127.0.0.1:6379> ZRANGE linux9 0 -1
    1) "tiwei"
    2) "jiwei"
    3) "shengwei"
    4) "banzhang"
    5) "xuewei"
    
    #查看排序及排序依据
    127.0.0.1:6379> ZRANGE linux9 0 -1 WITHSCORES
     1) "tiwei"
     2) "20"
     3) "jiwei"
     4) "50"
     5) "shengwei"
     6) "80"
     7) "banzhang"
     8) "90"
     9) "xuewei"
    10) "100"
    
    #查看排序及排序依据(倒叙)
    127.0.0.1:6379> ZREVRANGE linux9 0 -1 WITHSCORES
     1) "xuewei"
     2) "100"
     3) "banzhang"
     4) "90"
     5) "shengwei"
     6) "80"
     7) "jiwei"
     8) "50"
     9) "tiwei"
    10) "20"
    
    #查看指定成员的分数
    127.0.0.1:6379> ZSCORE linux9 xuewei
    "100"
    
    #查看成员的数量
    127.0.0.1:6379> ZCARD linux9
    (integer) 5
    
    #查看符合条件范围的成员
    127.0.0.1:6379> ZCOUNT linux9 50 100
    (integer) 4
    127.0.0.1:6379> ZRANGEBYSCORE linux9 50 100
    1) "jiwei"
    2) "shengwei"
    3) "banzhang"
    4) "xuewei"
    127.0.0.1:6379> ZRANGEBYSCORE linux9 50 100 WITHSCORES
    1) "jiwei"
    2) "50"
    3) "shengwei"
    4) "80"
    5) "banzhang"
    6) "90"
    7) "xuewei"
    8) "100"
    

    3)修改数据

    #修改数据的值,排行榜顺序也会改变
    127.0.0.1:6379> ZINCRBY linux9 100 tiwei
    "120"
    127.0.0.1:6379> ZREVRANGE linux9 0 -1 WITHSCORES
     1) "tiwei"
     2) "120"
     3) "xuewei"
     4) "100"
     5) "banzhang"
     6) "90"
     7) "shengwei"
     8) "80"
     9) "jiwei"
    10) "50"
    

    4)删除数据

    #删除集合中指定成员
    127.0.0.1:6379> zrem linux9 shengwei 
    (integer) 1
    127.0.0.1:6379> ZREVRANGE linux9 0 -1 WITHSCORES
    1) "tiwei"
    2) "120"
    3) "xuewei"
    4) "100"
    5) "banzhang"
    6) "90"
    7) "jiwei"
    8) "50"
    
    #删除整个key
    127.0.0.1:6379> del linux9
    (integer) 1
    
  • 相关阅读:
    漫谈企业级SaaS的多租户设计
    网易实战分享|云信IM SDK接口设计实践
    WebRTC系列之音频的那些事
    如何科学地完成一场 AR 发布会?全在这份超细节活动策划 Xmind 里了
    移动社交如何玩?网易云信携手崽崽和Uki打造更多新场景!
    行业观察|智慧屏集中爆发,大屏市场能否迎来破局者?
    Docker文件系统实战
    文字检测模型EAST应用详解 ckpt pb的tf加载,opencv加载
    opencv dnn加载EAST的pb模型的一点问题
    百度开源:PaddleOCR与PaddlePaddle / paddle2onnx 实践一
  • 原文地址:https://www.cnblogs.com/tcy1/p/13433917.html
Copyright © 2011-2022 走看看