随笔分类 - redis
摘要:1.缩短键值对的存储长度; 在 key 不变的情况下,value 值越大操作效率越慢,因为 Redis 对于同一种数据类型会使用不同的内部编码进行存储,比如字符串的内部编码就有三种:int(整数编码)、raw(优化内存分配的字符串编码)、embstr(动态字符串编码),这是因为 Redis 的作者是
阅读全文
摘要:内存淘汰策略分类 早期版本的 Redis 有以下 6 种淘汰策略: noeviction:不淘汰任何数据,当内存不足时,新增操作会报错,Redis 默认内存淘汰策略; allkeys-lru:淘汰整个键值中最久未使用的键值; allkeys-random:随机淘汰任意键值; volatile-lru
阅读全文
摘要:HyperLogLog是 Redis 2.8.9 版本添加的数据结构,它用于高性能的基数(去重)统计功能,它的缺点就是存在极低的误差率。 HLL 具有以下几个特点: 能够使用极少的内存来统计巨量的数据,它只需要 12K 空间就能统计 2^64 的数据; 统计存在一定的误差,误差率整体较低,标准误差为
阅读全文
摘要:有这么一个案例,Redis 服务器存储了海量的数据,其中登录用户信息是以 user_token_id 的形式存储的。运营人员想要当前所有的用户登录信息,然后悲剧就发生了:因为用了 keys user_token_* 来查询对应的用户,结果导致 Redis 假死不可用,以至于影响到线上的其他业务接连发
阅读全文
摘要:地理信息中,经度的范围 -180 到 180,纬度的范围为 -90 到 90。纬度以赤道为界,赤道以南为负数,赤道以北为正数;经度以本初子午线(英国格林尼治天文台)为界,东边为正数,西边为负数。 Redis 在 3.2 版本中增加了 GEO 类型用于存储和查询地理位置,GEO 本质上是基于 ZSet
阅读全文
摘要:管道技术(Pipeline)是客户端提供的一种批处理技术,用于一次处理多个 Redis 命令,从而提高整个交互的性能。 通常情况下 Redis 是单行执行的,客户端先向服务器发送请求,服务端接收并处理请求后再把结果返回给客户端,这种处理模式在非频繁请求时不会有任何问题。 但如果出现集中大批量的请求时
阅读全文
摘要:开启事务 multi命令 multi 命令不能嵌套使用,如果已经开启了事务的情况下,再执行 multi 命令,会报错:ERR MULTI calls can not be nested 执行相关命令入列 Redis事务以MULTI开始,中间添加多种命令,这些命令不会立即执行,而是被放入到一个队列中,
阅读全文
摘要:zset实现是由ziplist(数据量小),和skiplist(跳表)实现。 有序集合使用 ziplist 格式存储必须满足以下两个条件: 有序集合保存的元素个数要小于 128 个; 有序集合保存的所有元素成员的长度都必须小于 64 字节。 可以通过配置文件中的 zset-max-ziplist-e
阅读全文
摘要:其中的字段含义如下: zlbytes:压缩列表字节长度,占 4 字节; zltail:压缩列表尾元素相对于起始元素地址的偏移量,占 4 字节; zllen:压缩列表的元素个数; entryX:压缩列表存储的所有元素,可以是字节数组或者是整数; zlend:压缩列表的结尾,占 1 字节。 添加流程 列
阅读全文
摘要:Redis有三种持久化方式: 快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘; 文件追加方式(AOF, Append Only File),记录所有的操作命令,并以文本的形式追加到文件中; 混合持久化方式,Redis 4.0 之后新增的方式,混合持久
阅读全文
摘要:socket 小知识:每个 socket 被创建后,会分配两个缓冲区,输入缓冲区和输出缓冲区。 写入函数并不会立即向网络中传输数据,而是先将数据写入缓冲区中,再由 TCP 协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到
阅读全文