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

    本文为博主原创,未经允许不得转载:

      redis 共五种数据结构:

        类型及数据结构如下图所示:

                       

    1. String 

      常用命令:

    SET  key  value             //存入字符串键值对
    GET  key             //获取一个字符串键值
    MSET  key  value [key value ...]     //批量存储字符串键值对
    MGET  key  [key ...]         //批量获取字符串键值
    DEL  key  [key ...]         //删除一个键
    SETNX  key  value         //存入一个不存在的字符串键值对,如果key不存在,执行返回1,如果key存在,执行返回0
    EXPIRE  key  seconds         //设置一个键的过期时间(秒)
    
    
    # 原子加减
    INCR  key             //将key中储存的数字值加1
    DECR  key             //将key中储存的数字值减1
    INCRBY  key  increment         //将key所储存的值加上increment
    DECRBY  key  decrement     //将key所储存的值减去decrement

      使用场景:

        1. 缓存热点数据,缓存 string 类型的对象

        2. 缓存分布式会话 session

        3. 分布式锁 

        4. 计数器

      

    2. Hash 

      常用命令:

    HSET  key  field  value             //存储一个哈希表key的键值
    HGET  key  field                 //获取哈希表key对应的field键值
    HSETNX  key  field  value         //存储一个不存在的哈希表key的键值
    HMSET  key  field  value [field value ...]     //在一个哈希表key中存储多个键值对
    HMGET  key  field  [field ...]         //批量获取哈希表key中多个field键值
    HDEL  key  field  [field ...]         //删除哈希表key中的field键值
    HLEN  key                //返回哈希表key中field的数量
    HGETALL  key                //返回哈希表key中所有的键值
    
    HINCRBY  key  field  increment         //为哈希表key中field键的值加上增量increment

      使用场景:

        1. 可实现购物车功能

          1)以用户id为key

          2)商品id为field
          3)商品数量为value

    添加商品    hset cart:1001 10088 1
    增加数量    hincrby cart:1001 10088 1
    商品总数    hlen cart:1001
    删除商品    hdel cart:1001 10088
    获取购物车所有商品    hgetall cart:1001

      优缺点:

        优点:

          1)同类数据归类整合储存,方便数据管理   2)相比string操作消耗内存与cpu更小   3)相比string储存更节省空间

        缺点:

          1)过期功能不能使用在field上,只能用在key上

    3. list 

      常用命令:

    LPUSH  key  value [value ...]         //将一个或多个值value插入到key列表的表头(最左边)
    RPUSH  key  value [value ...]         //将一个或多个值value插入到key列表的表尾(最右边)
    LPOP  key            //移除并返回key列表的头元素
    RPOP  key            //移除并返回key列表的尾元素
    LRANGE  key  start  stop        //返回列表key中指定区间内的元素,区间以偏移量start和stop指定
    
    BLPOP  key  [key ...]  timeout    //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待,timeout秒,如果timeout=0,一直阻塞等待
    BRPOP  key  [key ...]  timeout     //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待,timeout秒,如果timeout=0,一直阻塞等待

      应用场景:

    Stack(栈) = LPUSH + LPOP
    Queue(队列)= LPUSH + RPOP
    Blocking MQ(阻塞队列)= LPUSH + BRPOP

         根据以上数据结构可以实现:消息发布订阅,消息推送等场景

    4. Set 

      Sets 是无序集合,自动去重。

      常用命令:

    SADD  key  member  [member ...]            //往集合key中存入元素,元素存在则忽略,若key不存在则新建
    SREM  key  member  [member ...]            //从集合key中删除元素
    SMEMBERS  key                    //获取集合key中所有元素
    SCARD  key                    //获取集合key的元素个数
    SISMEMBER  key  member            //判断member元素是否存在于集合key中
    SRANDMEMBER  key  [count]            //从集合key中选出count个元素,元素不从key中删除
    SPOP  key  [count]                //从集合key中选出count个元素,元素从key中删除

      Set 运算命令

    SINTER  key  [key ...]                       //交集运算
    SINTERSTORE  destination  key  [key ..]         //将交集结果存入新集合destination中
    SUNION  key  [key ..]                       //并集运算
    SUNIONSTORE  destination  key  [key ...]        //将并集结果存入新集合destination中
    SDIFF  key  [key ...]                       //差集运算
    SDIFFSTORE  destination  key  [key ...]         //将差集结果存入新集合destination中

      使用场景:

         1. 微博点赞,收藏,标签

         2. 微博或微信中可能认识的人,共同好友,共同关注的话题等。

    5. Zset

      常用命令:

    ZADD key score member [[score member]…]    //往有序集合key中加入带分值元素
    ZREM key member [member …]        //从有序集合key中删除元素
    ZSCORE key member             //返回有序集合key中元素member的分值
    ZINCRBY key increment member        //为有序集合key中元素member的分值加上increment 
    ZCARD key                //返回有序集合key中元素个数
    ZRANGE key start stop [WITHSCORES]    //正序获取有序集合key从start下标到stop下标的元素
    ZREVRANGE key start stop [WITHSCORES]    //倒序获取有序集合key从start下标到stop下标的元素
    
    
    ZUNIONSTORE destkey numkeys key [key ...]     //并集计算
    ZINTERSTORE destkey numkeys key [key …]    //交集计算

      使用场景:

        榜单排名,热点排名

    zadd board 85 zhangsan
    zadd board 72 lisi
    zadd board 96 wangwu
    zadd board 63 zhaoliu
    
    # 获取排名前三的用户(默认是升序,所以需要 rev 改为降序)
    zrevrange board 0 3
    
    # 获取某用户的排名
    zrank board zhaoliu

  • 相关阅读:
    time 模块学习
    day 14 自定义模块,常用模块 time .datetime ,time 模块
    day 13 课后作业
    day 12 课后作业
    day 11课后作业
    树状数组最值
    hdu 1059 Dividing bitset 多重背包
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    最长公共子序列板/滚动 N^2
    Uva 10635
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/15150303.html
Copyright © 2011-2022 走看看