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 //设置一个键的过期时间(秒)
    
  • 原子加减

    incr key 	//将key中存储的数字值加1
    
    decr key	//将key中存储的数字值减一
    
    incrby key increment	//将key所存储的值加上 increment
    decrby key decrement 	//将key所存储的值减去 decrement
    
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表中所有键值
    
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> 
```
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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值