redis使用用场景

371 阅读3分钟

String  

场景:用的太多

    set/get  

    mset/mget(批量设置值)

List(双向列表)

   场景:微博/公众号 消息流 用阻塞队列

               栈 (lpush lpop): 左进左出   

               队列(lpush rpop):先进先出

               阻塞队列(lpush ,BRPOP)

lpush key: 左进 rpush key: 右进:  lpop key 左出 rpop key: 右出  

lrange key  strat end  按下标取集合

Hash

   场景:购物车

    eg:   

        添加商品( hset key filed value ): hset    cart:uid     goodsId     goodNum  

        增加商品数量( hincrby key filed value ):  hincrby    cart:uid     goodsId   1 

        增加商品数量(hlen key):  hlen    cart:uid   

        删除商品(hdel key filed): hdel  cart:uid    goodsId 

        获取所有商品 (hgetall  key): hgetall   cart:uid    

优点:数据归类,方便管理

          相比string消耗内存和cpu较小,比string节省空间

缺点:过期功能不能使用在filed,只能在key 上

          redis 集群上不太适合使用

 

Set

   场景:

      抽奖小程序:

            eg:  参与抽奖(sadd key member)  : sadd  抽奖key  userId   

                   查看抽奖人员列表( smembers key): smembers  抽奖key

                   抽取n个中奖人数(srandmember key count ):  smember抽奖key 2

                   抽取n个中奖人数,并剔除抽中的人(stop  key count ): stop 抽奖key 2

       动态点赞,收藏:

              eg: 点赞(sadd key  filed) : sadd 动态key   userId

                    取消点赞(srem key filed ):srem 动态key userId

                    是否点赞(sismember):sismember 动态key  userId 

                     获取点赞人(smembers key)  smembers 动态key 

                     获取点赞人数(scard key ):scard key 

                                  

      关注关系(微博,交集,差集,合集,差集)

             eg: 共同关注的人,交集(sinter  set1 set2 set3 ....)

                   合集 : sunion set 1  set2 

                   可能认识的人差集: sdiff  set 1 set2 set 3

                   我关注的人怎样关注他: sismember   set1 key


zset

   场景: 排行榜

               点击新闻加1: zincrby  排行榜 key  1

                展示当日排行 前十: zrevrange  key 0 ,10

               七日排行前十: zrevrange key 

setnx

   场景: 分布式锁

setnx+ expire 

incry

场景:计数器


BitMap

(位图)

位图的key必须是数值类型,修改value 的 二进制数据   setbit  key  1000(index) 1,位图长度可以自动扩容

场景:

布隆过滤器  解决缓存 穿透问题 

缺点:能删除,需要定时重建布隆过滤器