写好业务代码-redis的使用

引言

在日常开发中我们有很多场景需要提供高并发的服务,那如果写出高并发的服务呢,目前最常用的方式就是使用缓存对数据访问进行加速。以提高接口的响应速度,提升并发量。
接下来我们来探索下如果更高效的使用缓存。我们以最常被使用的缓存redis为例分别分析下redis的5种数据结构的使用场景;

字符串(strings)

数据缓存

业务场景

使用缓存就是为了加速程序处理的效率,所以一般是对数据库数据的缓存,因为redis的读写效率高于数据库,还有一种是对于接口数据的缓存,一方面是保护下游服务避免流量直接打到下游服务,领一方面有些数据没有必要完全实时性。比如影城的座位图。

技术方案

key:业务前缀:业务唯一id
过期时间:随业务而定,有设置X时间(超时消失,然后访问时惰性加载)还有设置业务完全失效的,比如影城的座位图,当排期彻底过期后该缓存就没有意义。
初始值:一般该类型的缓存使用的都是惰性加载,不需要初始值;即缓存没有从远程资源获取存入缓存下次备用;
逻辑处理:先获取缓存,有缓存使用缓存,没有就调用远程资源,写入缓存。
在使用的时候也要根据相应的业务场景进行调整,比如上述的影城座位图缓存,为了客户体验即就算影城的这次接口没有返回数据,也不应该给用户看到的是空的信息,所以在做业务处理时,存入redis 的值不止是接口的返回数据,还有数据的请求时间,每次缓存获取完数据看下请求数据是否在规定的有效时间内,如果不在,调用接口刷新返回结果,如果有数据返回存入缓存返回数据,如果接口返回超时等错误,返回上次缓存的数据,尽量给客户提供最新的数据

限流 (INCR 命令)

业务场景

集群限流。有些服务是有最大访问限制的,即整个集群每分钟只能处理X个请求,有两种情况会有这2种需求,一种是对集群的保护。一种是营造业务繁忙的场景。只放少量的人进入后面的流程。

技术方案

key:业务前缀:yyyyMMddHHmm (后面的时间就是限流的单位,该事例是分钟)
过期时间:限流最小单位+X (x一般几秒就够,怕业务服务器和redis机器的时间有误差导致控制精度不足)
初始值:不需要设置 如果key 不存在 INCR 命令自动设置初始值为0
逻辑处理:进入方法第一件事就是进行自增处理,如果返回值大于限流值直接返回服务正忙。否则放行。
限流变种 如果资源同一时间只需要访问一次,比如影城特定场次座位图,在同一时间你只需去影城获取一次,所以在请求之前先获取值,如果等于1获取影城座位图,然后更新座位图缓存。 如果值大于1就不调用影城的座位图,而是稍作等待,使用缓存中的数据。

活动总量控制 (INCRBY 命令)

业务场景

发红包,在营销活动中经常有需求是对总量要进行控制的。因为成本问题不能进行超发。

技术方案

key:业务前缀:活动唯一标识;
过期时间:活动的解释时间+24小时;
初始值:活动的最大领取数;
逻辑处理:每次请求进来,判断完硬性条件,如活动状态,活动时间等,即确认完领取资格,调用INCRBY key -1 命令进行原子性减一。只要返回值>=0认为还有库存进行领取操作。如果活动的并发量太大,领取操作可以使用队列来进行异步处理。
增加库存:如果活动火爆需要增加库存,直接使用 set key 增加库存数来进行库存的增加。

利用set命令中nx参数做分布式锁

业务场景
需要并发控制的地方。举个具体的显示场景,比如1个停车位只能停1个车,如果2个车同时进入就是事故;但是这种1个资源只能被一个请求占用的情况使用 INCR 也能完成相同的功能。还有一种场景就是几个车道并入单车道,这种场景就没法用INCR ,因为INCR只能

散列(hashes)

存储对象信息,进行属性的原子性更新

存储集合性信息、

列表(lists)

队列 作为消费者和生产者的通道

总量控制

集合(sets)

有序集合(sorted sets)

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

推荐阅读更多精彩内容