redis应用场景:
一.string
1.缓存
简单key-value存储
2.分布式锁
setnx key value,当key不存在时,将 key 的值设为 value ,返回1
若给定的 key 已经存在,则setnx不做任何动作,返回0。
当setnx返回1时,表示获取锁,做完操作以后del key,表示释放锁,如果setnx返回0表示获取锁失败。
3.计数器
如知乎每个问题的被浏览器次数
set key 0 incr key // incr readcount::{帖子id} 每阅读一次 get key // get readcount::{帖子id} 获取阅读量
二.hash
比如我们要存储用户信息,ID、姓名、电话、年龄、身高 ,怎么存储?
key = userdata用户ID
hashKey = 姓名,value = xx
hashKey = 电话,value = xx
hashKey = 年龄,value = xx
hashKey = 身高,value = xx
查询时,取出key即可。
//新增 $redis->hSet(key, hashKey, value); $redis->hSet(key, hashKey, value); $redis->hSet(key, hashKey, value); //编辑 $redis->hSet(key, hashKey, value); //查询 $redis->hGetAll(key); //查询所有属性 $redis->hGet(key, hashKey); //查询某个属性
三.list
队列:比如实现一个简单的日志收集功能或发送大量短信、邮件的功能,实现方式是先将数据收集到队列中,然后有一个定时任务去消耗队列,处理该做的事情。
直接使用redis的rpush,lpop和lpush,rpop
//进队列 $redis->lpush(key, value); //出队列 $redis->rpop(key);
四.set
可以基于set做交集,并集,差集的操作。如把2个人的粉丝列表弄一个交集,就能看到两个人的共同好友是谁
1.实现点赞,签到,like等功能
//1001用户给8001帖子点赞
sadd like::8001 1001 srem like::8001 1001 //取消点赞 sismember like::8001 1001 //检查用户是否点过赞 smembers like::8001 //获取点赞的用户列表 scard like::8001 //获取点赞用户数
2.电商商品筛选:每个商品入库的时候即会建立他的静态标签列表如,品牌,尺寸,处理器,内存
// 将拯救者y700P-001和ThinkPad-T480这两个元素放到集合brand::lenovo sadd brand::lenovo 拯救者y700P-001 ThinkPad-T480 sadd screenSize::15.6 拯救者y700P-001 机械革命Z2AIR sadd processor::i7 拯救者y700P-001 机械革命X8TIPlus // 获取品牌为联想,屏幕尺寸为15.6,并且处理器为i7的电脑品牌(sinter为获取集合的交集) sinter brand::lenovo screenSize::15.6 processor::i7 -> 拯救者y700P-001
五.zset
排序的set,可以去重还可以排序,写进去的时候给一个分数,自动根据根据分数排序,分数可以自定义排序规则
redis的zset天生是用来做排行榜的、好友列表, 去重, 历史记录等业务需求
// user1的用户分数为 10 zadd ranking 10 user1 zadd ranking 20 user2 // 取分数最高的3个用户 zrevrange ranking 0 2 withscores