上一篇文章通过redis实现的抢红包通过测试发现有严重的阻塞的问题,抢到红包的用户很快就能得到反馈,不能抢到红包的用户很久(10秒以上)都无法获得抢红包结果,起主要原因是: 1.用了分布式锁,导致所有的操作只能顺序排队,而后面没有抢到红包的需要等待前面抢红包的同学完事后他才能去看自己是否已经抢到红包 2.多次与redis交互,消耗了很多时间(交互一次大概是几十到上百毫秒),分布式锁本身也需要和redis交互 所以通过仔细打磨,我决定通过lua表达式来达到缩减redis交互次数以及保证高并发情况下…
建议结合下一篇一起看 下一篇 数据结构+基础设施 数据结构 这里通过spring-data-jpa+mysql实现DB部分的处理,其中有lombok的参与 @MappedSuperclass @Data @NoArgsConstructor @AllArgsConstructor public class BaseEntity {//公共基础实体字段 @Id //标识主键 公用主键 @GeneratedValue //递增序列 private Long id; @Column(updatable…
本次示例使用的IDER测试完成 测试背景 : xx饿了去饭店吃饭  需要先和服务员点餐  点完餐后服务员将菜品传递给厨师制作  制作完成后吃饱 一 :创建流程图 创建上一篇测试成功出现的BpmnFile 测试环境不需要那么复杂,暂且先用到这几个控件 其他的在此不做演示 可以自己进行测试 1:开始画流程图 1.StartEvent 开始按钮(表明现在饿了要去吃饭) 2.UserTask 任务按钮(首先应该先到饭店进行点餐) 3.UserTask 任务按钮(服务员点完餐后要将菜品传递给厨师) 4.U…
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于我用c也是好几年以前了,些许错误在所难免,希望读者能不吝指出. 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充 曹工说Redis源码(3)--…
http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希表 key 中的域 field 的值设为 value . 如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作. 如果域 field 已经存在于哈希表中,旧值将被覆盖. 可用版本: >= 2.0.0 时间复杂度: O(1) 返回值: 如果 field 是哈希表中的一个新建域,并且值设置成…
package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出现,你把它们替换为字母c: 有ac或ca连续出现时,你可以把它们替换为字母b: 有bc或cb 连续出现时,你可以把它们替换为字母a. 你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短, 求最终结果的最短长度. 输入:字符串.长度不超过200,仅由abc三种小写字母组成…
这两年使用Redis从单节点到主备,从主备到一主多从,再到现在使用集群,碰到很多坑,所以决定深入学习下Redis工作原理并予以记录. 本系列主要记录了Redis工作原理的一些要点,当然配置搭建和使用这类就不说了,这个系列主要侧重Redis工作流程和管理,分享出来希望可以帮助到正在学习的童鞋们. Redis启动数据加载流程: 1)AOF持久化开启且存在AOF文件时,优先加载AOF文件. 2)AOF关闭或者AOF文件不存在时,加载RDB文件. 3)加载AOF/RDB文件成功后,Redis启动成功.…
在这里不讨论抢红包的算法,只用redis简单尝试解决抢红包.借助redis单线程和List的POP方法. static void Main(string[] args) { IRedisHelper redisClient = RedisFactory.CreateRedisRepository(); //初始化假数据 //红包的算法这里不关注 只用redis简单解决并发问题 ; //200元 2W分 //微信群200人 //20人抢 //发10包 / ; var key = "redisPac…
基础知识部分 如果需要掌握Redis的整个命令的执行过程,那么必须掌握一些基本的概念!否则根本看不懂,下面我就一些在我看来必备的基础知识进行总结,希望能为后面命令的整个执行过程做铺垫. 事件 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象.服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完…
2.3 hashes 类型及操作 Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加.删除操作都是 O(1)(平均).hash 特别适合用于存储对象.相较于将对象的每个字段存成单个 string 类型.将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象.省内存的原因是新建一个 hash 对象时开始是用 zipmap(又称为 small hash)来存储的.这个 zipmap 其实并不是 hash table,但是 zi…