经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Redis » 查看文章
Redis-第八章节-应用场景 - Mr-Tsing
来源:cnblogs  作者:Mr-Tsing  时间:2021/2/18 15:25:44  对本文有异议

目录

  • 概述
  • 详解

1、概述

Redis支持五种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合)。

2、详解

1、String(字符串)

定义: String 是 redis 最基本的类型,一个 key 对应一个 value。String 类型是二进制安全的。因为 string 底层的实现是简单动态字符串 sds,是可以修改字符串。

应用场景: 单值缓存、对象缓存、分布式锁、常规计数(粉丝数量、评论数量)、分布式session共享、分布式全局序列号。

具体实现:
单值缓存:

  1. set key value
  2. get key

对象缓存:

  1. set user:1 value(json格式数据)
  2. mset user:1:name tsingli user:1:balance 1888
  3. mget user:1:name user:1:balance

常规计数器:

  1. incr article:readcount:{文章id}
  2. get article:readcount:{文章id}

分布式系统全局序列号:

  1. incrby orderid 1000 # redis批量生成序列号提升性能

分布式锁:

  1. # 相关操作
  2. 线程1 setnx product:1001 true # 返回1代表获取锁成功
  3. 线程2 setnx product:1001 true # 返回0代表获取锁失败
  4. 。。。执行业务操作
  5. del product:1001 # 执行完业务释放锁
  6. set product:1001 true ex 10 nx # 防止程序意外终止导致死锁
  7. # 案例
  8. setnx product:1001 true
  9. 1.查询商品1001的库存
  10. 2.减库存
  11. 3.重新把减完剩余的库存更新回数据库
  12. del product:1001

setnx 如果插入的key一样不会对数据有任何操作,如果第二次对库存再进行减对的话就返回错误。

2、Hash(哈希)

定义: Hash是一个键值对集合。他相当于java中的双重map。<key,<filed,value>>。
应用场景: 购物车。
具体实现:
购物车:

  1. # 说明:
  2. # 用户id为1001,商品的编码是10088。
  3. # 用户id为key,商品id为field,商品数量为value。
  4. # 案例:
  5. # 添加商品:
  6. hset cart:1001 10088 1
  7. # 增加数量:
  8. hincrby cart:1001 10088 1
  9. # 商品总数:
  10. hlen cart:1001
  11. # 删除商品:
  12. hdel cart:1001 10088
  13. # 获取购物车所有商品:
  14. hgetall cart:1001

3、List(列表)

定义: 列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素在列表的头部或者尾部。
应用场景: Stack(栈)= LPUSH + LPOP -> FILO //先进后出Queue(队列)= LPUSH + RPOP //先进先出Blocking MQ(阻塞队列)= LPUSH + BRPOP //消息队列微博微信公众号消息流
具体实现:
微博和微信公众号消息流:

  1. # 李雷发微博,消息id为10018
  2. lpush msg:111111 10018
  3. # 韩梅梅车发微博,消息id为10086
  4. lpush msg:111111 10086
  5. # 查看最新微博消息
  6. lrange msg:11111 0 5 //0至5条微博消息。

4、Set(集合)

定义: Set 是 string 类型的无序集合。
应用场景: 微信抽奖小程序、微信微博点赞、收藏、标签、关注模型,就是可能认识的人的关系。
具体实现:
微信抽奖:

  1. # 点击参与抽奖加入集合
  2. sadd key {userId}
  3. # 查看参与抽奖的所有用户
  4. smembers key
  5. # 抽取count名中奖者(1) // srandmember不会将元素从集合中删除
  6. srandmember key [count] //抽取两名中奖者 srandmember act:1008 2
  7. # 抽取count名中奖者(2) // SPOP会将元素从集合中删除
  8. spop key 2

微信微博点赞、收藏、标签:

  1. # 点赞
  2. sadd like:{消息ID} {用户id}
  3. # 取消点赞
  4. srem like:{消息ID} {用户id}
  5. # 检查用户是否点过赞
  6. sismember like:{消息ID} {用户id}
  7. # 获取点赞的用户列表
  8. smembers like:{消息ID}
  9. # 获取点赞的用户树
  10. scard like:{消息ID}

5、Zset(有序集合)

定义: zset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个dobule类型的分数,redis正是通过分数为集合成员进行从小到大的排序,zset的成员是唯一的但是分数可以重复。

原文链接:http://www.cnblogs.com/ld320321/p/14401019.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号