摘要:总结 关键点1:Redis 有序集合(sorted set) Redis 有序集合sorted set和集合一样也是 string 类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。 有序集合的成
阅读全文
摘要:一、缓存和数据库一致性问题 读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MySQL)间的数据一致性问题。因为写和读是并发的,没法保证顺序,就会出现缓存和数据库的数据不一致的问题。 无论是“先删除缓存,再写库”,还是“先写MySQL数据
阅读全文
摘要:一、管道概念 1.1 为什么要有redis管道? redis本身处理速度很快,但是如果你连续调用10条redis命令,它们要有10个网络来回,这速度就会降下来了,那么有没有办法把这10条命令一起发送到服务端呢?有,它就是redis管道 1.2 redis管道的本质是什么? redis管道的本质是将要
阅读全文
摘要:方法一:keys 指令 - 会导致线程阻塞,不推荐 KEYS pattern #用法 KEYS t?? #查询如two,ttt这类的key KEYS * #查询所有key Redis的单线程的。KEYS命令一次性返回所有匹配的key,keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完
阅读全文
摘要:一、哈希槽介绍 Redis Cluster在设计中没有使用一致性哈希(Consistency Hashing),而是使用数据分片引入哈希槽(hash slot)来实现; 一个 Redis Cluster包含16384(0~16383)个哈希槽(补充:为什么redis集群的最大槽数是16384个?),
阅读全文
摘要:总结 1:Hash slot(slot 空间)对比一致性哈希(环空间) 可以做到数据分配更均匀 有 N 个节点,每个节点是准确的承担 1/N 的容量 一致性哈希,它使用的是hash函数返回的值是随机的。 2:Hash slot 更便捷的新增/删除节点 假设已有R1、R2、R3 节点 若新增 R4 节
阅读全文
摘要:为什么是16384(2^14)个? 在redis节点发送心跳包时需要把所有的槽放到这个心跳包里,以便让节点知道当前集群信息,16384=16k,在发送心跳包时使用char进行bitmap压缩后是2k(2 * 8 (8 bit) * 1024(1k) = 16K),也就是说使用2k的空间创建了16k的
阅读全文
摘要:总结 1. 为什么需要一致性哈希?传统的取模操作不行么? 一致性哈希算法(Consistent Hashing Algorithm)是一种分布式算法,常用于负载均衡。Memcached client也选择这种算法,解决将key-value均匀分配到众多cahce server上的问题。它可以取代传统
阅读全文
摘要:因为一致性hash算法是来做服务器的负载均衡,而服务器的IP地址是32位,所以是2^32-1次方的数值空间
阅读全文
摘要:总结 分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。 数据分布有三种方式: 逻辑拆分 哈希分区 固定取模分区 一致性哈希 虚拟槽分区 顺序分区 一、逻辑拆分 逻辑上能拆分,比如 Redis 中的 M1 节点 存储 A服
阅读全文
摘要:一、通过配置文件 Redis.conf,重启生效 通过配置文件 Redis.conf详解 ,修改 requirepass 属性,重启才有效. 二、通过命令设置密码,无需重启 config set requirepass 123456 指令设置密码为 123456,无需重启 auth 123456 使
阅读全文
摘要:一、Redis为什么需要集群? 1.1 Redis单实例的缺陷 存在容量有限,流量压力上限的问题。 单点故障问题。一旦唯一的实例宕机,数据丢失。 即使Redis单点故障,可以通过主从复制replication,和自动故障转移sentinel哨兵机制来解决。但Redis单Master实例提供读写服务,
阅读全文
摘要:2.8 版以前 - 通过同步(sync)和指令传播(command propagate) Redis 通过同步(sync)和指令传播(command propagate)两个操作完成同步 同步(sync):将从节点的数据库状态更新至与主节点的数据库状态一致 从节点向主节点发送 SYNC 指令 收到
阅读全文
摘要:参考答案 定时删除:在设置键的过期时间的同时,创建一个定时器,达到过期时间,执行键的删除操作 惰性删除:不主动删除过期键,从键空间中获取键时,都检查取得的键是否过期,过期则删除;没过期则返回 定期删除:每隔一段时间对数据库进行一次检查,删除里面的过期键。删除多少过期键、检查多少个数据库,由算法决定。
阅读全文
摘要:参考答案 主库压力很大,可以考虑读写分离 Master 最好不要做持久化工作,如 RDB 内存快照和 AOF 日志文件。(Master 写内存快照,save 命令调度 rdbSave 函数,会阻塞主线程,文件较大时会间断性暂停服务;AOF 文件过大会影响 Master 重启的恢复速度) 如果数据比较
阅读全文
摘要:数据结构:Redis 支持 5 种数据结构;Memcached 只支持字符串 性能对比:单核小数据量存储 Redis 比 Memcached 快;大数据存储 Redis 稍逊 持久化:Redis 支持持久化;Memecached 数据都在内存之中 线程模型:Redis 使用单线程模型,基于非阻塞的
阅读全文
摘要:优点: 性能极高,能到 100000 次/s 读写速度 支持数据的持久化,对数据的更新采用Copy-on-write技术,可以异步地保存到磁盘上 丰富的数据类型,String(字符串)、List(列表)、Hash(字典)、Set(集合)、Sorted Set(有序集合) 原子性:Redis 的所有操
阅读全文
摘要:默认: noenviction:Redis 的默认策略,不回收数据,当达到最大内存时,新增数据返回 error volatile 是对已设置过期时间的数据集淘汰数据: volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中,使用LRU算法淘汰最近最少使用的数
阅读全文
摘要:总结 1.Redis的LRU 实现思路 最初思路:随机选三个Key,把idle time(距离最后一次被命令程序访问的时间)最大的那个Key移除。后来,把3改成可配置的一个参数,默认为N=5:maxmemory-samples 5。该方法虽简单有效,但它还是有缺点的:每次随机选择的时候,并没有利用历
阅读全文
摘要:总结 当字符串存储要加入到布隆过滤器中时,该字符串首先由多个哈希函数生成不同的哈希值,然后在对应的位数组的下表的元素设置为 1(当位数组初始化时 ,所有位置均为0)。当第二次存储相同字符串时,因为先前的对应位置已设置为1,所以很容易知道此值已经存在(去重非常方便)。 如果我们需要判断某个字符串是否在
阅读全文