随笔分类 - Redis
摘要:Redis6键的常用命令 # 查看当前库所有的key key * # 判断某个key是否存在 exists key # 查看某个key是什么类型 type key # 删除指定的key del key # 根据value选择非阻塞删除 unlink key # 设置key的过期时间 expire k
阅读全文
摘要:Redis阅读笔记-类型检查与命令多态 Redis用于操作键的命令基本可以分为两种类型。 其中一种命令可以对任何类型的键执行,如del、expire、rename、type、object命令等。 举个例子,以下代码就展示了del命令来删除三种不同类型的键: # 字符串键 127.0.0.
阅读全文
摘要:Redis阅读笔记--对象的类型与编码 Redis使用对象来表示数据库中的键和值, 每次当我们在Redis的数据库中创建一个键值对时, 我们至少会创建两个对象, 一个对象用顾总键值对的键(键对象),另一个对象用作键值对的值(值对象)。 举个例子, 一下set命令在数据库中创建了一个新的键值对
阅读全文
摘要:Redis阅读笔记-Redis字符串内部结构 Redis中的字符串是可以修改的字符串,在内存中它是以字节数组的形式存在。我们知道C语言中的字符串标准形式是以NULL作为结束符, 但是在Redis里面字符串不是这么表示的。因为要获取NULL结尾的字符串的长度使用strlen标准库函数, 这个函数的
阅读全文
摘要:Redis阅读笔记-列表对象 列表对象的编码可以是ziplist或linkedlist。 ziplist编码的列表对象使用压缩表作为底层实现, 每个压缩表节点(entry)保存了一个列表元素。 举个例子, 若我们执行rpush命令, 那么服务器将创建一个列表对象作为numbers键的值: 1
阅读全文
摘要:Redis阅读笔记-哈希对象 编码 哈希对象的编码可以是ziplist或hashtable。 ziplist编码的哈希对象使用压缩列表作为底层实现,每当有新的键值对要加入到哈希对象时, 程序会先将保存了键的压缩列表节点推入到压缩列表的表尾, 然后再保存了值得压缩列表节点推入到压缩列表表尾,
阅读全文
摘要:Redis阅读笔记-集合对象 集合对象的编码可以是intset或hashtable。 intset编码的集合对象使用整数集合作为底层实现, 集合对象包含的所有元素都被保存再整数集合里。 举个例子, 以下代码将创建如下所示的intset编码集合对象: 127.0.0.1:6379> sad
阅读全文
摘要:Redis阅读笔记-有序集合对象 有序集合的编码可以是ziplist或者skiplist。 ziplist编码的压缩表对象使用压缩表作为底层实现, 每个集合元素使用两个紧挨在一起的压缩表节点来保存, 第一个节点保存元素的成员(member), 而第二个元素则保存元素的分值(score)。
阅读全文
摘要:Redis LRU 应用背景 当Redis内存超出物理内存限制时, 内存的数据会开始和磁盘产生频繁的交换(swap)。交换会让Redis的性能急剧下降, 对于访问量比较频繁的Redis来说, 这样龟速的存取效率基本上等于不可用。 在生成环境中我们是不允许Redis出现交换行为的, 为了限制最
阅读全文
摘要:Redis - 懒惰删除 一直以来我们认为Redis是单线程的, 单线程为Redis带来了代码的简洁性和丰富多彩的数据结构。不过Redis内部实际上并不是只有一个主线程, 它还有几个异步线程专门用来处理一些耗时操作。 Redis为什么要懒惰删除? 删除指令del会直接释放对象的内存, 大部分
阅读全文
摘要:Redis - Scan 在平时线上Redis维护工作中, 有时候需要从Redis实例成千上万的key中找出特定前缀的key列表来手动处理数据。可能是修改它的值, 也可能是删除可以。这里有一个问题,如何从海量的key中找出满足特定前缀的key列表来? Redis提供了一个简单粗暴的指令key
阅读全文
摘要:Redis 线程IO模型 Redis是单线程程序! 这点必须铭记。 Redis单线程为什么还能这么快? 因为它所有的数据都在内存中, 所有的运算都是内存级别的运算。正因为Redis是单线程, 所以要小心使用Redis指令, 对于那些时间复杂度位O(n)级别的指令, 一定要谨慎使用,一不小心就
阅读全文
摘要:Redis 布隆过滤器 应用场景 我们知道可以用HyperLogLog数据结构用来进行估数, 它非常有价值,可以解决很多精度不高的统计需求。 但是如果我们想知道某一个值是不是已经在HyperLogLog结构里面了, HyperLogLog就不能为力了, 它只提供了pfadd和pfcount方
阅读全文
摘要:管道(pipeline) Redis管道(pipeline)本身并不是Redis服务器直接提供的技术,这个技术本质上是有客户端提供的,跟服务器没有什么直接关系。 Redis消息交互 当我们使用客户端对Redis进行一次操作时,客户端将请求传送给服务器,服务器处理完毕后,在将响应回复给客户端。
阅读全文
摘要:Redis Geohash Redis在3.2版本后增加了地理位置GEO模块, 意味着可以使用Redis来实现摩拜但这[附近的Mobike]、美团和饿了么[附近的餐馆]这样的功能了。 用数据库来算附件的人 地图元素的位置数据使用二维的经纬度表示, 经度范围(-180, 180], 纬度范围(
阅读全文
摘要:Unbuntu 安装redis-cell 插件模块 redis-cell 限流模块 Redis4.0提供了限流Redis模块,它叫redis-cell。该某块也使用了漏斗算法, 并提供了原子的限流指令。 安装步骤 1、查看redis的系统版本 vagrant@homestead:~$ redis-s
阅读全文
摘要:漏斗限流 基本思路 漏斗限流是最常用的限流方法之一, 顾名思义, 这个算法的灵感来源于漏斗的结构。 漏斗的容量是优先的, 如果将漏斗嘴堵住, 然后一直往里面灌水, 它就会变满, 直至再也装不进去。如果将漏斗嘴放开, 水就会往下流, 水流走一部分后, 就又可以继续往里面灌水。 如果漏斗的流水速
阅读全文
摘要:简单限流 限流算法在分布式领域是一个经常被提起的话题,当系统的处理能力有限时, 如何阻止计划外的请求继续对系统施压, 这是一个需要重视的问题。 除了控制流量, 限流还有一个应用目的是用于控制用户行为, 避免垃圾请求。比如在用户的发帖、回复、点赞等行为都要严格受控,一般要严格限定某行为在规定时
阅读全文
摘要:Redis阅读笔记--压缩列表 压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表指包含少量的列表项, 并且每个列表项要么就是小整数值, 要么就是长度比较短的字符串, 那么Redis就会使用压缩列表来做列表键的底层实现。 例如,执行以下命令将会创建一个压缩列表实现的列表键。
阅读全文
摘要:Redis阅读笔记-整数集合 整数集合(intset)是集合键的底层实现之一, 当一个集合只包含了整数值元素, 并且这个集合的元素数量不多时, Redis就会使用整数集合作为集合键的底层实现。 举个例子,如果创建一个只包含5个元素的集合键, 并且集合中的所有元素都是整数值, 那么这个集合键的
阅读全文