随笔分类 - Redis
摘要:一、缓存击穿 1.概念 单个key并发访问过高,过期时导致所有的请求都打在db上。 2.解决方案 (1)加锁更新,比如请求查询A,发现缓存中没有,对A这个key加锁,同时去数据库查询数据,写入缓存,再返回给用户,这样后面的请求就可以从缓存中拿到数据了。 (2)将过期时间组合写在value中,通过异步
阅读全文
摘要:一、内存回收机制 redis并不总是将空闲内存立即归还给操作系统 例如:当前内存10G,删除里1G的key后,你会发现内存并没有变化 因为操作系统是以页为单位回收内存的,这个页上只要有一个key在使用,那么他就不能被回收。 如果执行flushdb,再去观察内存,会发现内存确实被回收了,因为所有的ke
阅读全文
摘要:谨记:redis是个单线程程序。直到6.0版本,才出现多线程。 一、为什么之前,是单线程的? redis作为成熟的分布式框架,它由很多模块组成: 网络请求模块 索引模块 存储模块 高可用集群模块 数据操作模块 - 通常所说的单线程指的是:网络IO和键值对读写是由一个线程完成的 为什么这两个模块不用多
阅读全文
摘要:一、位图 1.使用场景 存储bool型数据,例如用户一年的签到记录。 最小单位是bit, 取值只能是0或1. 各种实时分析. 存储与对象ID关联的节省空间并且高性能的布尔信息. 2.统计与查找 统计指令:bitcount;统计指定范围内1的个数 查找指令:bitpos;查找指定范围内出现的第一个0或
阅读全文
摘要:redis的锁分为乐观锁和悲观锁。 一、悲观锁(分布式锁) 这里解释一下,普通锁和分布式锁的区别: 1.普通锁:synronize和lock,处理的是单节点(一个进程)多线程并发的问题,保证数据安全; 2.分布式锁:redis, zk, mysql的分布式锁,处理的是多个节点的多个进程并发的安全问题
阅读全文
摘要:一、 set(集合) 简单概述 1.相当于java中的HashSet,它内部的键值对是无序的,唯一的。 2. set结构可以用来存储某活动中奖用户Id,因为有去重功能,可以保证同一用户不会中奖两次。 二、zset(有序列表) 最有特色的数据结构。 zset内部的排序功能是通过“跳跃列表”的数据结构来
阅读全文
摘要:一、list(列表) 1.核心特点 Redis的列表相当于Java语言里面的LinkedList,它是链表而不是数组。 list的插入和删除操作非常快,时间复杂度为O(1),但是索引定位慢,时间复杂度为O(n). 2.常用用途 常用来做异步队列使用。将需要延后处理的任务结构体序列化字符串,塞进red
阅读全文
摘要:1. 常见用途 缓存用户信息。 我们将用户信息结构使用JSON序列化成字符串,然后将序列化的字符串塞进redis来缓存。同样获取用户信息会经过一次反序列化的过程。 2.内部结构(扩容机制) 类似于Java的ArrayList,采用**预分配冗余空间**的方式来减少内存的频繁分配。 当字符串长度小于1
阅读全文

浙公网安备 33010602011771号