redis
文章平均质量分 86
A_BCDE_
这个作者很懒,什么都没留下…
展开
-
redis——优化
现:拆为100各hash 每个1万条数据,每个之前加不同前缀。如果节点过多,携带数据会很大,使用带宽变大,导致网络堵塞。内存不足 key频繁被删,qps不稳定,响应时间增长。多个节点之间互相ping ,同时携带集群和插槽信息。拆分成多个小的hash每个hash一部分数据。info memory 查看内存情况。有个别插槽不可用则认为整个集群不可用。redis做集群,客户端需要选择节点。集群需要使用代码完成,增加复杂度。部分命令不支持集群,只能单机。eg:原数据1-100万。原创 2023-04-12 21:12:06 · 897 阅读 · 0 评论 -
redis笔记
给key设置了ttl,如果线程1获取锁后长时间阻塞,导致key过期被删除,之后其他线程正常获取锁,线程1唤醒后执行完,del lock(此时的lock是别的线程的锁)。并发时,为响应速度提高,将部分数据在redis中缓存,在redis中更新数据,将更新的数据存在jvm阻塞队列中,再异步的将数据更新到数据库。查询不存在的数据(redis和数据库都没有),redis没有,请求会打到数据库。大量并发,数据库承受大量请求。get和del是两步操作,不是原子的,del时线程长时间阻塞,key过期被删除,同上。原创 2023-04-27 16:55:39 · 552 阅读 · 0 评论 -
redis内存回收——过期、淘汰
volatile-lfu:基于LFU算法,从设置了过期时间的key中,删除掉最不经常使用(使用次数最少)的key。allkeys-lru:基于LRU算法,从所有key中,删除掉最近最少使用的key。allkeys-lfu:基于LFU算法,从所有key中,删除掉最不经常使用(使用次数最少)的key。volatile-lru:基于LRU算法,从设置了过期时间的key中,删除掉最近最少使用的key。volatile-ttl:将设置了过期时间的key中即将过期(剩余存活时间最短)的key删除掉。原创 2023-04-10 20:03:23 · 1484 阅读 · 1 评论 -
redis网络模型
核心业务部分(命令处理):单线程核心网络模型:多线程,提高cpu利用率redis,纯内存操作,快性能瓶颈为网络延迟,多线程没有帮助多线程上下文切换有开销多线程存在线程安全问题,需要引入锁,复杂度提高,性能降低。原创 2023-04-10 12:55:04 · 619 阅读 · 0 评论 -
redis——数据结构
多个zipList,双端访问,内存占用低,存储上限高。数据量小(128),且每个元素大小较小(64B),则使用zipList。ziplist,相邻两个节点,一个存key,一个存value。根据score(value)排序,member(key)唯一。zipList:压缩列表,双端访问,内存占用低,存储上限低。大量string数据每一个都需要一个对象头,占大量空间。linkedList:双端链表,内存占用高,内存碎片多。dict:key存值,value为null,内存占用大。数据存两份,耗费内存。原创 2023-04-04 12:17:29 · 506 阅读 · 0 评论 -
redis源码解析(四)——ziplist
版本:redis - 5.0.4参考资料:redis设计与实现文件:src下的ziplist.c ziplist.h一、基础知识压缩列表是Redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序性数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值(短字符串或小的整数)。1、压缩列表的各个组成部分及详细说明zlbyteszlt...原创 2023-04-03 18:40:48 · 633 阅读 · 0 评论 -
redis源码解析(三)——dict
版本:redis - 5.0.4参考资料:redis设计与实现文件:src下的dict.c dict.h一、dict.hdict(字典),又称为符号表,关联数组或映射。用于保存键值对。字典使用哈希表作为底层实现。1、注释/*Hash Tables Implementation. * This file implements in-memory hash tables with ...原创 2023-04-03 18:17:58 · 971 阅读 · 0 评论 -
redis源码解析(二)——SDS(简单动态字符串)
版本:redis - 5.0.4参考资料:redis设计与实现文件:src下的sds.c sds.h一、基础知识c语言中,字符串最后需要加一个空字符‘\0’,作为结束标志。sds延续了这种做法,兼容部分c字符串函数。二进制安全:由于以空字符作结束标志,所以C语言中,字符串里不能包含空字符。为了解决这个问题,sds以处理二进制的方式处理数据。sds同样用字符数组存储字符串。字符串修改...原创 2023-04-03 17:26:27 · 1057 阅读 · 1 评论 -
redis源码解析(一)—— adlist
版本:redis-5.0.4.tar.gz。原创 2023-05-15 20:05:33 · 320 阅读 · 1 评论