不仅仅是缓存,Redis的妙用

704 阅读23分钟

redis是键值对的数据库,通常Redis用作缓存,主要两个用途:高性能,高并发,因为内存天然支持高并发。兔哥今天撩一撩Redis的其他使用场景和使用案例 

 分布式锁(string)

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

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

计数器(string)

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

set key 0incr key // incr readcount::{帖子id} 每阅读一次get key // get readcount::{帖子id} 获取阅读量

分布式全局唯一id(string)

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

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

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

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

消息队列(list)

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

# 实现方式一# 一直往list左边放lpush key value # key这个list有元素时,直接弹出,没有元素被阻塞,直到等待超时或发现可弹出元素为止,上面例子超时时间为10sbrpop key value 10 # 实现方式二rpush key valueblpop key value 10