Redis实战场景设计

一、字符串

setnx
    设置成功时返回1,设置失败返回0,只可以进行设置,不可以进行修改
    可以实现分布式锁:
    setnx key value

问题:

    (1)死锁。

    获取锁,超时了,引出了另一个命令 expire 设置锁的过期时间,后续执行完后,进行锁的释放,del。

    但是,setnx 设置锁和expire设置锁的过期时间并不是一个原子性的操作,执行过程中可能出现异常情况,导致expire在设置锁的过期时间失败。从而无法保证无死锁的原子发生。

    解决方式:使用 set命令 set stock ex 10 nx,保证了redis分布式锁的无死锁的原子性操作完成了。

    (2)使用set ex nx 保证了redis分布式锁无死锁的原子性操作,一般也会存在如下问题。

    情景:

    A拿到了redis的锁,设置了10秒的过期时间,但是A的业务执行了20秒才完成。而B不断的尝试进行获取锁,到10秒的时候发现A原理获取的锁释放了,从而B也获得了锁,B也执行B的业务,等到20秒的时候,A的业务执行完成,执行了del删除锁的命令。

    原因:业务的执行时间大于锁的时间,没有满足锁的互斥性。

    解决方式:

        (1)充分的预估业务的执行时间;

        (2) 锁块到期了,业务没有执行完成,(可以开守护线程,将锁重新进行续时操作,确保锁的时间大于业务的执行时间),如果业务的确执行超时了,不能无限制的进行重试续时。保障重试次数。

        (3)在删除锁的时候出现误删的情况,需要判断是不是自己的锁。
set命令
set key value [ex seconds][nx]

场景:网站618限流。IP访问网站50次,禁止访问了,明天可以访问。
incr 自增
expire 有效期定义到24点
incrby
ID生成器--集成环境下,ABC三台redis集群,A机器从1开始,B机器从2开始,C机器从3开始,每次增长长度为3

二、hash*

hset 设置单个,hmset设置多个

存储的是结构化的存储方案。

三、list

简单场景:简单的消息队列。。

左进右出,先进先出。

延时队列。。

四、集合

集合中不能存在重复值。集合中的值无序且唯一

场景1:年会抽奖。

sadd choujiang  xrj wzs fjf

srandmember

smembers choujiang   集合元素

spop choujiang 1   集合中弹出1个元素

场景2:点赞、收藏、转发

sadd like:520  xrj fjf wzs   #喜欢520这篇文章的人

srem like:520 xrj            #某个用户取消点赞

smembers like:520            #查看谁点赞了

scard liek:520                #统计这篇文章一共多少人点赞

sismember like:520 xrj         #查看某个元素是否在指定的集合中

场景3:set运算

sinter key   #返回一共集合的全部成员,该集合是所有给定集合的交集

sunion key   #并集

sdiff key      #差集

五、zset有序集合

场景:有两个门店卖水果,统计水果的销售量

今天那个水果卖的好。

zadd meidian1 10 pingguo 20 juzi 30 putao    #门店1卖了10斤的苹果,20斤的橘子,30斤的葡萄

zadd meidian1 15 boluo                         #忘记了统计菠萝

zrange mendian1 0 -1                          #查看门店1中的所有数据

zrange mendian1 0 -1 withscore                 #查看门店1中的所有数据,带权重值

zadd meidian2 30 lizhi 20 xigua 15 shanzhu   #门店1卖了30斤的荔枝,20斤西瓜,15斤山竹

两个门店一共统计

zunionstore mendianall 2 mendian1 mendian2   #zunionstore将两个集合进行合并,合并后的集合为mendianall,一共有2个门店,分别为mendian1和门店2

zrange mendian1ll 0 -1                       #查询所有的数据,从小到大

zrange mendianall 0 -1 withscore             #查看门店中的所有数据,带权重值

zrevrange mendianall 0 -1 withscore          #查看门店中的所有数据,带权重值,进行倒叙,从大到小

六、bitmaps

bitmaps在string的基础上延伸出来的,单个key的存储大小为512M,如果超出了512M,会有什么情况?
防止大value,kv大小大于10Kb的称为大value,如果大value的存在,要进行value拆分。

情景:

统计一下,今年有多少用户登录了网站?
统计一下,连续上课3天的同学?
统计用户学习一年达到200天,赠送一门?

对于以上情景,就是2种状态,非1即0

setbit ke 10010 1   #用户10010来上课了

setbit ke 10011 1      #用户10011来上课了

setbit ke 10012 1     #用户10012来上课了

getbit ke 10010      #看看10010上不是上课了

strlen ke              #查看这个key占用多大空间

setbit lianxu0610 10010 1  #连续上课的时间6月10号

setbit lianxu0610 10011 1  #连续上课的时间6月11号

setbit lianxu0610 10012 1  #连续上课的时间6月12号

setbit lianxu0611 10010 1  #连续上课的时间6月10号

setbit lianxu0611 10011 1  #连续上课的时间6月11号

setbit lianxu0612 10010 1  #连续上课的时间6月10号

bitop and lianxu lianxu0610 lianxu0611 lianxu0612  #连续三天上课的用户

bitcount ke 0 -1           #总共上课次数

Redis分布式锁的正确操作方式

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容