1. 数据结构
1.1 String
1.mest批量操作实现json的功能
MEST key value [key value …]
2.点赞文章
incr article:account:{文章ID}
//对文章id是1000的每次加1
incr article:readcount:1000
1.2 hash
- hset user 1:name 1:classs
2.实现购物车+1的功能
hset cart:1001 1
hincrby cart:10081 1
优点:性能比string高,内存也占用更少
缺点: 集群分片问题,一个Key只能在一个片上,会发生热点问题
比如userkey下面有4300万用户,则用户都会分到一个片上
//redis分片位置
Hash slot =CRC16(KEY)%16384
3. 如何搭建redis集群
安装Redis的Windows版本并进行配置
搭建 Redis集群,三个主节点,三个从节点
如果不想按照步骤来的话,我这里有我下载好,并且打好的包,直接百度云下载下来,执行少量的步骤就能用百度云地址
3.2 哈希槽
测试hash槽分配到集群中的节点
- 随便登上一个实例,记得加上参数-c,启用集群模式的客户端,否则无法正常运行。
redis-cli -c -p 6380
结果如下:
127.0.0.1:6380> set hh 11
-> Redirected to slot [12077] located at 127.0.0.1:6382
OK
- 可以看到,Redis集群会计算key落在哪个卡槽,然后会把命令转发到负责该卡槽的节点上执行。
利用cluster keyslot
命令计算出key是在哪个槽位上,从而得出会跳转到哪个节点上执行。
127.0.0.1:6382> cluster keyslot hh
(integer) 12077
-
具体槽位和集群节点怎么分配的呢,
redis集群模式会将16384个槽slot分到不同的服务器上去,比如:12077/16384=1.35
也就会分配到第二个服务器上 -
redis多主多从集群如图所示,其中至少是三主三从
1.4 LIST
lpush key value Rpush key
栈和队列
阻塞队列 lpush+Brpop
- 微信和微博的微信公众号订阅功能
比如100个大V,1000万人订阅了
1.5 SET
- 抽奖
SADD
2. 三等奖抽奖,抽中一等奖的不能再抽二等奖 SPOP
3. 点赞 SADD
收藏 、标签
- set集合操作如并集、差集、交集 ,相互关注的好友才能看到消息
关注的人,可能认识的人
5. 排行
- 筛选
- 更多
基于reids的分布式锁,由于锁超时,第一个进程还没有结束,但是锁超时了,第二个进程重新获取了锁,就会导致第一个进程会把第二个进程的锁删除了
解决方案;对每一格线程加一个唯一ID,比如UUID,雪花ID
适合:只是获取锁,而不进行处理,真正处理在获取锁之后
redission 单机、集群、哨兵模式
redission三行代码,其实就实现了reids的很多操作