Redis常见使用场景
来源:互联网 发布:代言宝无水印版源码 编辑:程序博客网 时间:2024/05/22 17:14
1、使用String实现计数
特点:String的Value一般是String,也可以是数字
内部实现:当涉及数字运算时,自动把String转换为Integer进行运算
应用场景:对客户端发送验证码次数进行限制
String借助INCR、INCRBY、DECR、DECRBY可以实现原子计数
2、 使用List实现队列
特点:允许重复
内部实现:List实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销
(1)模拟生产者消费者模式
对于需要高并发写入数据库的场景
可以先将sql语句rpush放入队列,后台线程定期从队列中lpop,再将sql语句进行合并,最后以事务的方式一次执行,大大减轻数据库的压力
(2)事件提醒
Blpop是lpop的阻塞版本,可以模拟【事件触发】场景,当数据到来之前处于阻塞状态,一旦数据到达立即处理,避免使用轮询方式检查数据
(3)消息队列、优先级队列(在高并发环境下,由于来不及同步处理,请求往往会发生堵塞):
使用阻塞方式:blpop high_list mid_list low_list,返回第一个非空List的头部元素
不使用阻塞方式:var listArr = [‘high’,’mid’,’low’],在业务中自主选择遍历哪个List
使用sorted set实现(缺点是没有阻塞版的接口):
Zadd score 230 zhangshan 250 lisi 240 wangwu
由低到高:zrange score 0 -1
由高到低:zrevrange score 0 -1
3、使用Hash存储对象实例
特点:一个key可对应多个field,一个field对应一个value
(1)存储对象
需要存储用户对象信息,key为用户ID,value包含用户姓名、年龄、住址等
Hmset user:001 name zhangshan age 40 city beijing
其它可能的实现
对象序列化
Set user:001 “name:zhangshan,age:40,city:beijing”
Jedis支持set(byte[],byte[])内部实现是序列化
缺点:序列化反序列化开销创建多个key
Set user:001:name zhangshan
Set user:001:age 40
Set user:001:city Beijing
缺点:大量对象会导致大量key如何存储List(Object)
借助序列化发序列化,jedis支持set(byte[],byte[])
(2)消息推送给指定用户
服务端使用hash存储不同用户消息,例如hmset message user01 msg01 user02 msg02 user03 msg03……..
客户端启动时主动拉取消息,根据用户ID去查询自己的消息,例如hget message user01
4、Set
特点:Set不允许重复(自动去重),可以通过SISMEMBER判断是否存在,不同的Set可以求【交集】、【差集】、【并集】
内部实现:Set内部实现是一个 value永远为null的HashMap
5、SortedSet
特点:SortedSet在Set基础上引入SCORE,并可以在SCORE基础上进行一系列统计
内部实现:sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
应用场景:实现优先级队列、需要排序场景等
- Redis常见使用场景
- Redis常见使用场景
- Redis 的 5 个常见使用场景
- redis常见的几种使用场景
- Redis 的 5 个常见使用场景
- Redis 的 5 个常见使用场景
- Redis 的 5 个常见使用场景
- redis常见使用场景下PHP实现
- redis常见使用场景下PHP实现
- Redis 常见 的几种使用场景
- Redis 常见 的几种使用场景
- Redis常见7种使用场景
- redis常见的几种使用场景
- Redis 的 5 个常见使用场景
- Redis常见7种使用场景(PHP实战)
- Redis常见七种使用场景(PHP实战)
- Redis常见7种使用场景(PHP实战)
- redis五种常见使用场景下PHP实现
- 对程序学习的看法
- 数据结构封装之《CircleList循环链表》
- static静态块、构造函数。主方法的执行顺序!
- 简图记录-正则表达式原理与应用基础
- 【C语言】【unix c】进程资源的回收
- Redis常见使用场景
- SDUT-2055
- PAT甲级1005. Spell It Right (20)
- 【转】Rancher部署Træfik实现微服务的快速发现
- TCP空闲扫描原理
- POJ3713-Transferring Sylla
- SVM防止过拟合
- iOS view圆角设置同时又不影响子视图超出父视图部分显示
- VirtualBox相关问题