Redis 常见数据类型以及使用场景分析
Redis中有string、list、hash、set、sorted set、bitmap这6种数据类型。
string可以用来做缓存,分布式锁,计数器等。
list可以实现消息队列,分页查询等。
hash适合存储对象结构。
set 可以轻易实现交集、并集、差集的操作。
sorted set比set增加了个权重字段,可以有序排列。通常用来设计排行榜。
bitmap存储的是一串二进制数字,可以实现布隆过滤器。
按照上面回答后可能会延伸的点:
1.如何实现分布式锁?
第一步:确定唯一标识。先针对当前业务定义个唯一标识,建议唯一标识前加上业务类型,比如用户要进行下订单操作,则可以用“ORDER:用户编码”作为唯一标识,避免同一用户连续下多个订单,也避免了受其他业务的影响。
第二步:尝试加锁。使用setnx命令设置KEY为“ORDER:用户编码”,值为新生成的UUID(释放锁时需要进行对比,避免因锁超时导致解锁错误),如果key已存在,设置失败返回0,表示加锁失败。key不存在时才能设置成功,返回1,表示加锁成功。
第三步:给锁加超时时间。使用expire命令给KEY加一个合适的超时时间,要大于自己业务代码执行时间。
第三步:释放锁。业务代码执行完毕后将锁释放出来,先使用get获取锁的UUID,与第二步生成的UUID进行对比,如果一致,则在finally中使用del直接删除此key。
?注意:第二步与第三步因为不是原子操作,可能出现第二步执行完后服务挂了,导致锁不会自动释放。避免这种情况的做法是使用LUA脚本,执行 “set key value ex 超时时间 nx”将第二步与第三步合并起来。回答时要提一下。
2.如何实现计数器?
decr自减,incr自增