redis 应用场景

redis应用场景:

一.string

1.缓存

简单key-value存储

2.分布式锁

setnx key value,当key不存在时,将 key 的值设为 value ,返回1

若给定的 key 已经存在,则setnx不做任何动作,返回0。

当setnx返回1时,表示获取锁,做完操作以后del key,表示释放锁,如果setnx返回0表示获取锁失败。

3.计数器

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

面试官:redis五种基本数据类型的应用场景是啥?
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 
原文地址:https://www.cnblogs.com/jackzhuo/p/13338874.html