redis
文章平均质量分 93
酒剑随马@
努力变强
展开
-
redis中hash数据结构
目录hash的数据结构ziplist底层实现字典底层实现扩容缩容引用hash的数据结构hash底层数据结构的实现包括两种:ziplist和字典当保存的所有键值对字符串长度小于 64 字节并且键值对数量小于 512 时使用ziplist ,否则使用字典的方式ziplist底层实现字典底层实现字典(dict):其中包含长度为2的哈希表数组dictht,rehashIdx(默认-1)如果为-1说明当前没有扩容,如果不为 -1 则表示正在进行扩容,记录了原hash表需rehash的数组下标h原创 2022-05-04 00:33:12 · 6239 阅读 · 2 评论 -
redis缓存与数据库的一致性一种解决方案
以抢购活动中商品的库存为例,大家可以想一下在淘宝上买东西,当把商品放到购物车里面的时候,并没有真正的扣减库存;因为可能很多用户都有加购物车的习惯,但真正购买人数其实远没有这么多,当我们点击购买,到达支付页时才会真正的判断库存是否足够,满足条件时,扣减库存生成待支付订单。通常情况下如果用户的并发量不高时,代码中可以在库存操作上使用redis 分布式锁或mysql for update的方式,来防止超卖;但一旦并发量大起来将有大量的用户阻塞在这一过程中,导致请求超时,进而整个系统奔溃,且这种方式对数据库库存原创 2021-02-06 19:11:34 · 1401 阅读 · 2 评论 -
分布式限流实现
当前大多数项目都是分布式架构,某些情况下高并发的场景需要对请求进行限流。如果是单节点我们可以使用google为我们提供的guava包下的RateLimiter进行限流,它使用的是令牌桶算法,分布式场景下也可以使用网关进行限流,如Spring Clound Gateway,其实还有很多开源的限流框架如阿里的Sentinel,甚至我们可以利用redis+lua脚本自己来实现限流。下面简单介绍一下常见的限流算法1.固定窗口计数法在这种算法中,将一段时间划分为多个时间窗口,在每个窗口内进行请求时会进原创 2020-08-19 01:08:39 · 920 阅读 · 0 评论 -
一致性hash和redis中hash槽的区别
一致性hash主要用于分布式系统中,用于解决数据选择节点存储、选择节点访问、增删节点后数据的迁移和重分布问题。redis集群并没有使用一致性hash,而是使用了hash槽来解决数据分配的问题。一致性hash:它是一个0-2^32次方的圆,主要操作步骤:将每一个节点进行hash(如ip),让其落在这个闭合的圆环上;当我们进行数据存储或访问时,计算key的hash值,让其也落在这个闭合圆环之中;那么它顺时针找到的第一各服务节点就是存储key的节点当添加节点时,例如再节点2和4之间添加了一个节点5原创 2020-08-15 16:31:11 · 4736 阅读 · 3 评论 -
redis中热点数据及大value处理
1.redis的热点数据是什么,可能出现什么问题?某个key的访问频率很高,当一个key的qps到达1000的时候就需要关注了。redis中数据分布在集群的不同节点上,当某个key的qps过高,容易出现大量的读请求落在某一个redis数据分片节点上,造成负载不平衡,即访问倾斜从而将该节点打挂,那么该节点的所有缓存都不可用了,就会出现缓存雪崩等情况,造成大量的请求直接落到数据库上,造成数据库的查询阻塞甚至宕机。比较严重的就像微博某个明星宣布离婚,粉丝涌入留言,造成品论功能失效。2.该如何定位热点数据?原创 2020-08-14 00:13:56 · 3985 阅读 · 0 评论 -
redis中的string数据结构
redis是使用c语言编码的,string的实现是使用了一种称为sds动态字符串的结构体,如下所示struct sdshdr { int len; int free; char buf[]; }len就是当前redis中key对应value的长度(已使用字节数),free指存储字符串数组buf的剩余空间(未使用字节数),即buf的长度为len+free+1,在C语言中字符串是由空字符为结尾的,这个1正是指结尾的空字符。结构如下图所示:因为redis中value值会经常发生变化原创 2020-07-25 16:34:24 · 648 阅读 · 0 评论 -
redis-sorted set(zset)实现
redis数据结构与底层实现 string dict字典 list sds hash ziplist set quicklist sort set skiplist redis支持多种数据结构,本文仅就sorted set展开讨论。 sorted set与set结构一样均为string类型的对象,且不允许重复的元素,...原创 2020-04-06 20:42:16 · 4792 阅读 · 0 评论 -
redis相关问题
redis是一个基于内存的高性能key-value数据库,将数据缓存在内存中,并周期性把更新的数据写入磁盘或者把修改操作写入追加的记录文件(与memcached区别),并且在此基础上实现了master-slave(主从)同步。此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据。redis的过期数据的淘汰机制是怎样的?1.惰性删除Redis很懒,有些Key...原创 2019-06-07 19:22:36 · 566 阅读 · 2 评论