redis
沐雨金鳞
大行不顾细谨
展开
-
为什么Redis集群有16384个槽?
对于客户端请求的key,根据公式HASH_SLOT=CRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作!那大家思考过,为什么有16384个槽么?ps:CRC16算法产生的hash值有16bit,该算法可以产生2^16-=65536个值。换句话说,值是分布在0~65535之间。那作者在做mod运算的时候,为什么不mod65536,而选择mod16384?这个问题,作者是给出了回答的!地址如下:https://github.com/an...转载 2020-09-26 20:19:31 · 3864 阅读 · 0 评论 -
redis事务
事务介绍Redis事务是一组命令的集合,将多个命令进行打包,然后这些命令会被顺序的添加到队列中,并且按顺序的执行这些命令。Redis事务中没有像Mysql关系型数据库事务隔离级别的概念,不能保证原子性操作,也没有像Mysql那样执行事务失败会进行回滚操作。这个与Redis的特点:快速、高效有着密切的关联,因为一些列回滚操作、像事务隔离级别那这样加锁、解锁,是非常消耗性能的。所以,Redis中执行事务的流程只需要简单的下面三个步骤:开始事务(MULTI) 命令入队 执行事务(EXEC)、撤转载 2020-09-13 20:33:15 · 165 阅读 · 0 评论 -
redis中的hash扩容渐进式rehash过程
背景:redis字典(hash表)当数据越来越多的时候,就会发生扩容,也就是rehash对比:java中的hashmap,当数据数量达到阈值的时候(0.75),就会发生rehash,hash表长度变为原来的二倍,将原hash表数据全部重新计算hash地址,重新分配位置,达到rehash目的redis中的hash表采用的是渐进式hash的方式:1、redis字典(hash表)底层有两个数组,还有一个rehashidx用来控制rehash2、初始默认hash长度为4,当元素个数与has.原创 2020-08-01 10:49:22 · 7710 阅读 · 2 评论 -
Redis实现分布式锁
初始:实现redis中库存数据-1的基本逻辑@RestControllerpublic class disLockController { @Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("/deduct_stock") public String deductStock(){ int stock = Integer.parseInt(s..原创 2020-07-24 18:42:49 · 161 阅读 · 0 评论 -
Redis底层
0、redis中字符串的实现方式和redis对象字符串的实现方式:简单动态字符串(simple dynamic string,SDS)作为 Redis 的默认字符串表示。structsdshdr{ //记录buf数组中已使用字节的数量 //等于 SDS 保存字符串的长度 4byte intlen; //记录 buf 数组中未使用字节的数量 4byte intfree; //字节数组,用于保存字符串 字节\0结尾的字符串占用了1byte ...原创 2020-06-26 18:40:51 · 297 阅读 · 0 评论
分享