合集-Redis
摘要:redis为什么这么快 基于内存实现 redis将数据存储在内存中,内存的读写速度很快,所以redis速度很快 高效的数据结构 哈希表 跳表 压缩表 快表 双向链表 简单动态字符串 整数数组 单线程模型 使用IO多路复用 合理的数据编码 Redis为什么会比MySQL快? 1.(内存和磁盘的区别)R
阅读全文
摘要:数据类型和底层结构的对应 数据的存储模型 string list hash set Zset
阅读全文
摘要:SDS Redis 中的字符串是可以修改的字符串,在内存中它是以字节数组的形式存在的。我们知道 C 语言里面的字符串标准形式是以 NULL(即 0x\0)作为结束符,但是在Redis 里面,字符串不是这么表示的。因为要获取以 NULL 结尾的字符串的长度使用的是 strlen 标准库函数,这个函数的
阅读全文
摘要:字典是 Redis 服务器中出现最为频繁的复合型数据结构,除了 hash 结构的数据会用到字典(dict)外,整个Redis 数据库的所有 key 和 value 也组成了一个全局字典还有带过期时间的 key 集合也是一个字典。zset 集合中存储 value 和 score 值的映射关系也是通过字
阅读全文
摘要:quicklist Redis早期版本存储list列表数据结构使用的是压缩列表ziplist 和普通的双向链表linkedlist,也就是说当元素少时用ziplist,当元素多时用linkedlist。 //链表的节点 struct listNode<T>{ listNode* prev; list
阅读全文
摘要:Redis 为了节约内存空间使用,zset 和 hash 容器对象在元素个数较少的时候,采用压缩列表(ziplist)进行存储。压缩列表是一块连续的内存空间,元素之间紧挨着存储,没有任何冗余空隙。 >zadd programmings 1.0 go 2.0 python 3.0 java (inte
阅读全文
摘要:Redis 5.0 版本又引入了一个新的数据结构 listpack,它是对 ziplist 结构的改进版,在存储空间上会更加节省,而且结构上也比 ziplist 更精简。listpack 的整体形式和 ziplist还是比较接近的,如果你认真阅读了 ziplist 的内部结构分析,那么对于 1ist
阅读全文
摘要:intset 小整数集合 set 集合容纳的元素都是整数并且元素个数较少时, Redis 会使用 intset 来存储集合元素。 intset 是紧凑的数组结构,同时支持 16 位、 32 位和 64 位整数 struct intset<T> { int32 encoding;//决定整数位宽是 1
阅读全文
摘要:redis在项目中的主要作用 缓存,速度比较快 计数器,incr decr 消息队列,消息的订阅和发布机制 排行榜,zset 分布式锁,set 数据结构 String(emdstr,raw) List(quicklist) HashMap(hashtable ziplist) Set(intset
阅读全文
摘要:ZSet底层有两种实现,一种是ZipList,另一种是SkipList+HashTable
阅读全文
摘要:一致性哈希解决了分布式系统在服务器节点动态伸缩时的数据迁移问题 一致性哈希算法(Consistent Hashing)最早在论文《Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot
阅读全文
摘要: 
阅读全文
摘要:过期删除 Redis 提供了四个命令来设置过期时间(生存时间): EXPIRE :表示将键 key 的生存时间设置为 ttl 秒; PEXPIRE :表示将键 key 的生存时间设置为 ttl 毫秒; EXPIREAT :表示将键 key 的生存时间设置为 timestamp 所指定的秒数时间戳;
阅读全文
摘要:如果在 Redis 中没有过期这个概念,这就意味着我们所有写入的键只要不主动删除就会一直保存在 Redis 中,而 Redis 又是一个基于内存的数据库,内存空间是非常有限的。 过期操作 过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key
阅读全文
摘要:持久化 Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。 Redis的持久化机制有两种,第一种是快照,第二种是AOF日志(Append only file)。 快照是一次全量备份,AOF日志
阅读全文
摘要:字典扩容 Java 中的 HashMap 有扩容的概念,当 LoadFactor 达到阈值时,需要重新分配一个新的 2 倍大小的数组,然后将所有的元素全部 rehash 挂到新的数组下面。 rehash就是将元素的 hash 值对数组长度进行取模运算,因为长度变了,所以每个元素挂接的槽位可能也发生了
阅读全文
摘要:数据库和缓存如何保证一致性? 阿旺登陆到了服务器,经过一番排查后,确认服务器的性能瓶颈是在数据库。 这好办,给服务器加上 Redis,让其作为数据库的缓存。 这样,在客户端请求数据时,如果能在缓存中命中数据,那就查询缓存,不用在去查询数据库,从而减轻数据库的压力,提高服务器的性能。 先更新数据库,还
阅读全文
摘要:(请注意redis在rdb持久化(bgsave)和重写aof(bgrewriteaof)的时候创建子线程) Redis 是个单线程程序!这点必须铭记。也许你会怀疑高并发的 Redis 中间件怎么可能是单线程。很抱歉,它就是单线程,你的怀疑暴露了你基础知识的不足。莫要瞧不起单线程,除了Redis 之外
阅读全文
摘要:为什么需要分布式锁 现在大多数的项目都是由分布式架构所搭建起来的,常常会采用集群以及部署在多台服务器上等方式运行,想必现在nginx的反向代理、负载均衡已经无人不知无人不晓了吧。由于通过用户不同的电脑已经不同的浏览器进行访问项目,就会由nginx转发给集群中的项目实例,此时常用的锁由于跨服务器的原因
阅读全文
