加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

关于Redis的n种妙用,不仅仅是缓存

发布时间:2019-06-26 04:35:41 所属栏目:MySql教程 来源:IT界的小柠檬
导读:redis是键值对的数据库,常用的五种数据类型为字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)。 Redis用作缓存,主要两个用途:高性能,高并发,因为内存天然支持高并发。 应用场景 分布式锁(string
副标题[/!--empirenews.page--]

关于Redis的n种妙用,不仅仅是缓存

redis是键值对的数据库,常用的五种数据类型为字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)。

Redis用作缓存,主要两个用途:高性能,高并发,因为内存天然支持高并发。

应用场景

分布式锁(string)

setnx key value,当key不存在时,将 key 的值设为 value ,返回1。若给定的 key 已经存在,则setnx不做任何动作,返回0。

当setnx返回1时,表示获取锁,做完操作以后del key,表示释放锁,如果setnx返回0表示获取锁失败,整体思路大概就是这样,细节还是比较多的,有时间单开一篇来讲解

计数器(string)

如知乎每个问题的被浏览器次数

关于Redis的n种妙用,不仅仅是缓存(附有自学资料分享哦)
  1. set key 0 
  2. incr key // incr readcount::{帖子id} 每阅读一次 
  3. get key // get readcount::{帖子id} 获取阅读量 

分布式全局唯一id(string)

分布式全局唯一id的实现方式有很多,这里只介绍用redis实现

关于Redis的n种妙用,不仅仅是缓存(附有自学资料分享哦)

每次获取userId的时候,对userId加1再获取,可以改进为如下形式

关于Redis的n种妙用,不仅仅是缓存(附有自学资料分享哦)

直接获取一段userId的最大值,缓存到本地慢慢累加,快到了userId的最大值时,再去获取一段,一个用户服务宕机了,也顶多一小段userId没有用到

  1. set userId 0 
  2. incr usrId //返回1 
  3. incrby userId 1000 //返回10001 

消息队列(list)

在list里面一边进,一边出即可

  1. # 实现方式一 
  2. # 一直往list左边放 
  3. lpush key value  
  4. # key这个list有元素时,直接弹出,没有元素被阻塞,直到等待超时或发现可弹出元素为止,上面例子超时时间为10s 
  5. brpop key value 10  
  6. # 实现方式二 
  7. rpush key value 
  8. blpop key value 10 

关于Redis的n种妙用,不仅仅是缓存(附有自学资料分享哦)

新浪/Twitter用户消息列表(list)

关于Redis的n种妙用,不仅仅是缓存(附有自学资料分享哦)

假如说小编li关注了2个微博a和b,a发了一条微博(编号为100)就执行如下命令

  1. lpush msg::li 100 

b发了一条微博(编号为200)就执行如下命令:

  1. lpush msg::li 200 

假如想拿最近的10条消息就可以执行如下命令(最新的消息一定在list的最左边):

  1. # 下标从0开始,[start,stop]是闭区间,都包含 
  2. lrange msg::li 0 9  

抽奖活动(set)

  1. # 参加抽奖活动 
  2. sadd key {userId}  
  3. # 获取所有抽奖用户,大轮盘转起来 
  4. smembers key  
  5. # 抽取count名中奖者,并从抽奖活动中移除 
  6. spop key count  
  7. # 抽取count名中奖者,不从抽奖活动中移除 
  8. srandmember key count 

实现点赞,签到,like等功能(set)

关于Redis的n种妙用,不仅仅是缓存(附有自学资料分享哦)

 
  1. # 1001用户给8001帖子点赞 
  2. sadd like::8001 1001 
  3. # 取消点赞 
  4. srem like::8001 1001 
  5. # 检查用户是否点过赞 
  6. sismember like::8001 1001  
  7. # 获取点赞的用户列表 
  8. smembers like::8001  
  9. # 获取点赞用户数 
  10. scard like::8001  
  11. 实现关注模型,可能认识的人(set) 

关于Redis的n种妙用,不仅仅是缓存(附有自学资料分享哦)

seven关注的人

sevenSub -> {qing, mic, james}

青山关注的人

qingSub->{seven,jack,mic,james}

Mic关注的人

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!