Redis 值的原子性可以很简单的满足很多业务场景
他有八种数据类型,常用的五种
string 基本命令 GET、SET
散列hash 基本命令 hset hget 单个; hmset hmget多个;hgetall;hdel
list 基本命令 LPUSH LPOP lrange lrem返回删除的个数
set 基本命令 sadd spop sinter sdiff sunion srem返回删除个数
Sorted set
1. 字符串键:做分布式锁
//设置锁字符串键,若锁已经存在那么设置失败,也就是获取锁失败,等待
SETNX("SUO",1)==1//成功获取锁
SETNX("SUO",1)==0//被占用,资源获取锁失败
业务处理完毕释放分布式锁
DEL("SUO");
//设置锁失效时间,防止宕机,系统运行意外导致锁无法释放
PEXPIRE("SUO",10000)
上面的几步尽量放到一个事务中。 MULTI 命令
2. 字符串,帖子等阅读计数器
set readcount::10001 1
每读一次要进行 incr readcount:10001 只增加一
可以使用incrby 一次性获取一段数据。可以用作序列号、表主键的生成,这样一次获取一段数据
可以减轻Redis服务器的压力
3. 和string对比来讲,hash方法基本一致,hash键的存在主要意义在于减少内存占用 ,他对field层是不去管理的。
但是对于有关有效期的设置上,另外如果要考虑数据分布的时候,hash不适用。
4.list
LPUSH LRANGE
BRPOP 右侧阻塞弹出数据,如果没数据则等待,time时间,如果0 则一直等待,基于该特性可以实现消息队列;
基于列表可以实现消息列表。 a关注了, AAA, BBB,CCC
step1,aaa发微博,消息ID 为1111
LPUSH {a-ID} 1111
step2,bbb发微博,消息ID 为2222
LPUSH {a-ID} 2222
step3,取最新的10个信息
LRANGE {a-ID} 0 1*10
5. set
sadd 直播平台刷花抽奖的业务场景; 点赞的功能;
交集并集合差集计算,可以实现关注模型(可能认识的人):
交集:共同关注的人 差集:可能认识的人
商品标签的功能; 支付信息对账功能;
6. zset ZCARD key 获取有序集合的成员数
可以实现排行榜的功能