• Redis五种数据结构-常用命令


    Redis 常用命令

    五种数据结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6YgFAGbG-1657014404256)(C:\Users\zpmei\AppData\Roaming\Typora\typora-user-images\image-20220705104341390.png)]

    String

    • 字符串常用操作

      set key value //存入字符串键值对
      
      mset key value [key value ...]   //批量存储字符串键值对
      
      setnx key value //存入一个不存在的字符串键值对
      
      get key 		//获取一个字符串的建值
      mget key [key ...]	//批量获取字符串键值
      del key [key ...]  //删除一个键
      expire key seconds //设置一个键的过期时间(秒)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 原子加减

      incr key 	//将key中存储的数字值加1
      
      decr key	//将key中存储的数字值减一
      
      incrby key increment	//将key所存储的值加上 increment
      decrby key decrement 	//将key所存储的值减去 decrement
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    String 应用场景

    • 单值缓存

      set key value

      get key

    • 对象存储

      set user value(json数据)

      mset user1 value1 user2 value2

      mget user1 user2

    • 分布式锁

      setnx product:10001 true //返回1代表获取锁成功

      setnx product:10001 true //返回0代表获取锁失败

      …执行业务操作

      del product:10001 //执行完业务释放锁

      set product:10001 true ex 10 nx //防止程序意外终止导致死锁

    • 计数器

      incr key

      get key

    • Web 集群 session 共享

      spring session +redis 实现session共享

    • 分布式系统全局序列号

      incrby orderid 1000 //可以考虑 redis批量生产序列号提升性能

    Hash

    • hash常用操作

      hset key field value	//存储一个hash表key的键值
      
      hsetnx key field value 	//存储一个不存在的hash表key的键值
      
      hmset key field value [field value]	//在一个hash表key中存储多个键值对
      
      hget key field	//获取hash表key对应的field键值
      
      hmget key field [field ...] 	//批量获取hash表key对应的field键值
      
      hdel key value 	//删除hash表key中field键值
      
      hlen key		//返回hash表中field的数量
      
      hgetAll key	//返回hash表中所有键值
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15

    hash应用场景

    • 电商购物车

      1、以用户id为key

      2、商品id为field

      3、商品数量为value

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yrTtn8OV-1657014119304)(C:\Users\zpmei\AppData\Roaming\Typora\typora-user-images\image-20220705152510752.png)]

    • 购物车操作
      • 增加商品---->hset uid:1001 10081 1
      • 增加数量---->hincrby uid:1001 10088 1
      • 商品总数---->hlen uid:1001
      • 删除商品---->hdel uid:1001 10088
      • 获取购物车所有商品---->hgetall uid:1001

    hash结构优缺点

    • 优点
      • 同类数据归类整合储存,方便数据管理
      • 相比string操作消耗内存与cpu更小
      • 相比string储存更节省空间
    • 缺点
      • 过期功能在field上使用不了,只能用在key上
      • redis集群架构下不适合大规模使用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aO5680aM-1657014119305)(C:\Users\zpmei\AppData\Roaming\Typora\typora-user-images\image-20220705153429311.png)]

    List

    • 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

    list应用场景

    • 微博消息和微信公众号消息

      • 王小明关注了张三,李四等大V

        1、张三发微博,消息id为10001

        ​ lpush msg:{张三id} 10001

        2、李四发微博,消息id为10002

        ​ lpush msg:{李四id} 10002

        3、查看最新关注的微博消息

        ​ lrange msg:{张三id} 0 4

    Set

    • set 常用操作

      sadd key member [member …]

      srem key member [member …]

      smembers key //获取集合key的所有元素

      scard key //获取集合key的元素个数

      sismember key member //判断member元素是否存在与集合key中

      srandmember key [count] //从集合key中选出count个元素,元素不从key中删除

      spop key [count] //从集合中选出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中

    set应用场景

    • 微信小程序抽奖

      1、点击参与抽奖加入集合

      sadd key userid

      2、查看参与抽奖的所有人员

      smembers key

      3、抽取 count名中奖者

      srandmember key [count] //不会删除中奖者元素

      spop key [count] //会删除中奖者元素

    ZSet

    • zset常用操作
      127.0.0.1:6379> zadd zsetKey 20 zs 50 ls 80 xy		//往有序集合key中加入带分值元素
      (integer) 3
      127.0.0.1:6379> zrem zsetKey zs ls		//从有序集合key中删除元素
      (integer) 2
      127.0.0.1:6379> zscore zsetKey xy		//返回有序集合key中元素 zsetKey的分值
      "80"
      127.0.0.1:6379> zincrby zsetKey 50 xy	//为有序集合 zsetKey中元素xy 的分值加50
      "130"
      127.0.0.1:6379> zcard zsetKey			//返回有序集合zsetKey的元素个数
      (integer) 1
      127.0.0.1:6379> zrange zsetKey 0 5 		//正序获取有序集合zsetKey从start 到stop的下标元素
      1) "xy"
         127.0.0.1:6379> zrevrange zsetKey 0 5//倒序获取有序集合zsetKey从start 到stop的下标元素
      2) "xy"
         127.0.0.1:6379> 
      ```
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

      ZSet应用场景

      • Zset集合操作实现排行榜

        1、点击新闻 数量加一

        zincrby hotNew:20220705 1 标题名

        2、展示当日排行榜前十

        zrevrange hotNews:20220705 0 9

        3、七日搜索榜单计算

        zunionstore hotNews:20220705-20220712 7 hotNews:20220706 hotNews:20220707 hotNews:20220708 hotNews:20220709 hotNews:202207010 hotNews:202207011 hotNews:202207012

        4、展示七日排行前十

        zrevrange hotNews:20220705-20220712 0 9

      tNews:20220705 0 9

      3、七日搜索榜单计算

      zunionstore hotNews:20220705-20220712 7 hotNews:20220706 hotNews:20220707 hotNews:20220708 hotNews:20220709 hotNews:202207010 hotNews:202207011 hotNews:202207012

      4、展示七日排行前十

      zrevrange hotNews:20220705-20220712 0 9

    1. 相关阅读:
      [附源码]SSM计算机毕业设计智能视频推荐网站JAVA
      Redis数据库redisDb源码分析
      蓝桥杯 题库 简单 每日十题 day3
      有这些症状要考虑是湿气重的原因?
      【Python自动化Excel】Python与pandas字符串操作
      【GRNN回归预测】基于matlab有限增量进化广义回归神经网络LIEV-GRNN数据回归预测【含Matlab源码 2132期】
      TCP/IP协议专栏——Vlan详解——网络入门和工程维护必看
      从入门到精通|Yalmip+Cplex在电力系统中的应用(超棒,看不懂算我输,没有收获也算我输)
      MPP 架构在 OLAP 数据库的运用
      JAVA 包装类
    2. 原文地址:https://blog.csdn.net/weixin_42292697/article/details/125624785