redis 学习笔记(七) 业务场景分析与相关案例
目录
一.案例一
1.百度自研语音识别服务,免费给企业开放使用,现对用户进行限速,限制每个用户每分钟最多发起10次调用
解决方案:
1.设计计数器,调用次数用于控制业务执行次数,以及用户id为key,使用次数为value
2.调用前获取次数,判断是否超过限定次数
不超过次数的情况下,每次调用计数+1
业务调用失败,计数-1
为计数器设置生命周期为指定周期,例如:1秒, 1分钟
如图所示:

案例如下:

实现1分钟之内的增长
解决方案改良:
取消最大值的判定,利用incr超过最大值抛出异常的方式替代每次都要判断是不是超过10
判断是否为nil
如果是,设置为MAX-预定次数
如果不是,计数+1
业务调用失败,计数-1
遇到异常即+操作超过上限,视为使用达到上限


超过ERR increment or decrement wouid overflow 捕获异常即可
利用最大值,做触发判断
tips16:redis应用于限时按次的服务结算控制
二.微信接受消息顺序
业务场景:
微信接收消息后,会默认将最近接收的消息置顶,当多个好友及关注的订阅号同时发送消息,该排序会不停的进行交替
,将重复会话设置置顶.一旦用户离线后,再次打开微信时,消息该按什么的顺序显示
解决方案:
1.依赖list的数据具有顺序的特征对消息进行管理,将list结构作为栈使用
2.对置顶与普通会话分别创建独立的list分别管理
3.当某个list中接收到用户消息后,将消息发送方的id从list一端加入list(此处设为左侧)
4.多个相同id发出的消息反复入栈会出现问题,在入栈之前无论是否具有当前id对应的消息,先删除该id
5.推送消息时先推送置顶会话list, 再推送普通会话list,推送完成的list清楚所有数据
6.消息的数量,也就是微信用户对话数量采用计数器的思想另行记录,伴随list操作同步更新
tips17:
redis应用于基于时间顺序的数据操作而不是关注具体时间
三.通用指令---key基本操作
1.key通用指令和数据库通用指令
key特征:
key是一个字符串,通过key获取redis中保存的数据
key应该设计哪些操作
1.对于key自身有效性的相关操作:例如删除,判定存在,获取类型等
2.对有效性控制相关操作:例如有效期设定,判定是否有效,有效状态的切换等
3.对于key快速查询操作,例如按指定策略查询key等
4.删除指定key del key

5.获取key是否存在 exists key
![]()
6.获取key的类型 type key

key扩展操作(时效性)
1.为key设置有效期
expire key seconds
![]()
pexpire key milliseconds 毫秒
![]()
expireat key seconds 时间戳
pexpireat key milliseconds timestamp 时间戳
获取key的有效时间
ttl key (time to live )

pttl key


切换key从时效性转换为永久性 persist key
![]()
2.key查询操作
key扩展操作(查询模式)
查询key keys pattern
查询模式的规则
1.* 匹配任意数量的任意符号
?配合一个任意符号
[] 匹配一个指定符号
例子:
keys * 查询所有
keys it* 查询所有以it开头
keys *heima 查询所有以heima结尾
keys ??kong 查询所有前面两个字符任意,后面以heima结尾
keys user? 查询所有以user开头最后一个字符任意
keys u[st]1 查询所有以u开头,以1结尾,中间包含一个字母,s或者t
3.key的其他操作
为key改名
rename key newkey 如果存在重复结果仍然改掉

renamenx key newkey 存在重复结果,不覆盖改名失败
![]()
sort为所有key排序

help@ generic查询相关命令的用法
查看通用组的命令包括del,dump…等等通用命令

四.数据库通用操作
1. 数据库
key值的重复问题
1.key是由程序员定义的
2.redis在使用过程中,伴随着操作数据量的增加会出现大量的数据以及对应的bug
3.数据不区分种类,类别混杂在一起,极易出现重复或者冲突
解决方案:
1.根据业务规范命名空间
2.redis为每个服务提供16个数据库,编号从0到15
3.每个数据库之间的数据相互独立
2.db基本操作
切换数据库
select index
输入密码即可

数据操作
move key db 移动数据到目标仓库

数据清除
dbsize 库中数据总量
flushdb 清除db库中数据,默认0号仓库
![]()
flushall 清空redis数据库
![]()
更多推荐



所有评论(0)