目录

一.案例一

二.微信接受消息顺序       

三.通用指令---key基本操作         

四.数据库通用操作

 


 

 

一.案例一

          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数据库

                           

              

            

 

 

   

                        

                                  

 

 

                                  

 

 

 

                             

                     

 

 

               

            

 

 

 

 

 

                       

                 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐