
Redis
主要记录Redis的学习及工作中遇到的问题的解决方案
Hiro · ZHAO
这个作者很懒,什么都没留下…
展开
-
Redis学习手册19—集群
Redis集群Redis集群是从Redis 3.0版本开始正式引入的功能,它给用户带来了在线扩展Redis系统读写性能的能力,而Redis 5.0更是在集群原有功能的基础上,进一步添加了更多新功能,并且对原有功能做了相当多的优化,使得整个集群系统更简单、易用和高效。基本特性Redis集群提供了非常丰富的特性供用户使用,下面逐个介绍。复制与高可用Redis集群与单机版的Redis服务器一样,也提供了主从复制功能。在Redis集群中,各个Redis服务器成为节点(node),其中主节点(master原创 2020-06-18 18:58:24 · 1390 阅读 · 0 评论 -
Redis学习手册18—Sentinel
故障转移因为Redis支持主从复制,并且主从服务器的数据完全一致。因此,当主服务器因故障下线时,将它的其中一台从服务器转换为主服务器,并使用新的主服务器继续处理命令请求,这样整个系统就可以继续运行,不比仅因为主服务器下线而停机。这种使用正常服务器替换下线服务器以维持系统正常运转的操作,一般被称为故障转移(failover)。手动故障转移因为Redis支持主从复制特性,所以我们同样可以对下线的Redis主服务器实施故障转移,假设现在有一个主服务器 127.0.0.1:6379(简称 6379),它有两个原创 2020-06-16 17:02:22 · 1178 阅读 · 0 评论 -
Redis学习手册16—模块功能
虽然Redis提供了非常丰富的数据结构以及强大的功能,如流水线、事务,特别是Lua脚本的引入,让用户可以很方便的扩展Redis的功能,但是这些或多或少都有各自的缺陷。例如,使用Lua脚本来扩展Redis,就需要对熟悉Lua脚本的语法以及Lua数据类型与Redis数据类型直接的转换。为了解决进一步解决Redis功能扩展问题,Redis在4.0版本添加了一个重要功能——模块Redis的模块Redis的模块功能允许开发者通过Redis开放的一簇API,将Redis用作网络服务和数据平台,通过C语言在Redis原创 2020-06-14 22:27:31 · 786 阅读 · 0 评论 -
Redis学习手册15—发布与订阅
发布与订阅Redis的发布与订阅功能可以让客户端通过广播方式,将消息同时发送给可能存在的多个客户端,并且发送消息的客户端不需要指定接收消息的客户端的具体信息,也就是说发送消息的客户端与接收消息的客户端没有直接的联系。在Redis中,客户端可以通过订阅特定的频道(channel)来接收发送至该频道的消息,我们把这些订阅频道的客户端称为订阅者(subscriber),把发送消息给频道的客户端称为发送者(publisher)。一个频道可以有多个订阅者,而一个订阅者也可以订阅多个频道。命令速查表命令原创 2020-06-13 23:54:36 · 380 阅读 · 0 评论 -
Redis学习手册14—持久化
正如之前所说的,Redis与传统数据库的一个主要区别在于,Redis把所有数据都存储在内存中,而传统数据库通常只会把数据的索引存储在内存中,并将实际的数据存储在硬盘中。虽然Redis这样的数据存储方式使得用户可以极快的访问数据,但是由于内存属于易失存储器,这对于想把Redis当做数据库而不仅仅是缓存的用户来说是不愿看到的。为了解决上述问题,Redis向用户提供了持久化功能,这一功能把内存中的数据以文件的形式存储到硬盘上,即可保证数据不会轻易丢失。Redis持久化分类为了满足不同的持久化需求,Redis原创 2020-06-12 23:25:26 · 297 阅读 · 0 评论 -
Redis学习手册13—Lua脚本
Redis对Lua脚本的支持是从Redis 2.6.0版开始引入的,它可以让用户在Redis服务器内置的Lua解释器中执行指定的Lua脚本。被执行的Lua脚本可以直接调用 Redis命令,并使用Lua语言及其内置的函数库处理命令结果。Lua脚本给Redis带来的变化引入Lua脚本特性,为Redis带来了如下直观的变化:可以使用Lua脚本来很方便的扩展Redis服务器的功能。Redis服务器以原子方式执行Lua脚本,在执行完整个Lua脚本及其包含的Redis命令之前,Redis服务器不会执行其客户端原创 2020-06-12 17:13:49 · 638 阅读 · 0 评论 -
Redis学习手册12—流水线与事务
流水线Redis的流水线特性:这个特性允许客户端把任意多条Redis命令请求打包在一起,然后一次性的全部发送给服务器,而服务器则会在流水线包含的所有命令请求处理完毕之后,一次性的将它们的执行结果全部返回给客户端。通过使用流水线特性,我们可以将执行多条命令所需的网络通信次数从 NNN 次降低到 1 次,这可以大幅度减少程序在网络通信方面耗费的时间,使得程序的执行效率得到显著的提升。事务Redis事务保障了多条命令执行的情况下,要么全部执行成功,要么全都不执行。MULTI:开启事务使用MULTI命令原创 2020-06-11 23:19:48 · 243 阅读 · 0 评论 -
Redis学习手册11—自动过期
前言随着时间推移,Redis中会出现越来越多的数据,有的数据可能使用频率比较低,但是这些数据一直占用着内存资源,为了提高资源利用率,将一些无用的数据或者使用频率较低的数据移出Redis数据库,Redis提供了自动的键过期功能,通过这个功能,用户可以让特定的键在指定的时间之后自动被移除,从而避免了无用数据长期占用资源的问题发生。EXPIRE、PEXPIRE:设置生存时间用户可以通过执行EXPIRE命令或者PEXPIRE命令为键设置一个生存时间(Time To Live,TTL):键的生存时间在设置之后流原创 2020-06-11 22:28:47 · 909 阅读 · 0 评论 -
Redis学习手册10—数据库操作
前言前面的章节中,我们介绍了Redis提供的一系列数据结构及其相关的命令。Redis作为一款优秀的内存数据库,因此也提供了一系列关于数据库管理方面的操作命令,因此本章主要内容就是关于Redis数据库管理方面的操作介绍。主要内容Redis为数据库提供了丰富的操作命令,通过这些命令,用户可以:指定自己想要使用的数据库。一次性获取数据库包含的所有键,迭代地获取数据库包含的所有键,或者随机地获取数据库中的某个键。根据给定的键的值进行排序。检查给定的一个或多个键,看他们是否存在于数据库中。查看给定原创 2020-06-11 19:21:21 · 320 阅读 · 0 评论 -
Redis学习手册9—数据结构之流
Redis的流流(Stream)是Redis 5.0版本中新增的数据结构,也是该版本最重要的更新。在以往的版本中,为了实现消息队列这一常见的应用,用户往往会使用列表,有序集合和发布与订阅这3个功能,但这些不同的实现都有各自的缺陷:列表实现的消息队列虽然可以快速的将新消息追加到列表的末尾,但因为列表为线性结构,所以程序如果想要查找包含指定数据的元素,或者进行范围查找,就需要遍历整个列表。有序集合虽然可以有效的进行范围查找,但缺少列表和发布与订阅提供的阻塞弹出原语,这使得程序无法使用有序集合实现可阻塞的原创 2020-06-10 23:09:28 · 571 阅读 · 1 评论 -
Redis学习手册8—数据结构之地理坐标
Redis地理坐标Redis GEO是Redis 在3.2版本中新添加的特性,通过这一特性,用户可以将经纬度格式的地理坐标存储到Redis中,并对这些坐标执行距离计算,范围查找等操作。地理坐标的功能Redis为GEO特性提供了一系列命令,具体如下所示:将位置的名字以及它的经纬度存储到位置集合中。根据给定的位置名字,从位置集合中取出与之对应的经纬度。计算两个位置之间的直线距离。根据给定的经纬度或位置,找出该位置指定的半径范围内的其他位置。获取指定位置的Geohash编码。地理坐标命令原创 2020-06-09 23:27:03 · 605 阅读 · 0 评论 -
Redis学习手册7—数据结构之位图
Redis数据结构之位图Redis的位图Redis位图功能位图命令速查表命令详解SETBIT命令位图的扩展GETBIT命令BITCOUNT命令BITPOS命令BITOP命令BITFIELD命令根据偏移量对区域进行设置根据索引对区域进行设置获取区域存储的值执行加法或减法处理溢出使用位图存储整数的原因Redis的位图Redis的位图(bitmap)是由多个二进制位组成的数组,数组中的每个二进制位都有与之对应的偏移量(也称索引),用户通过这些偏移量可以对位图中指定的一个或多个二进制位进行操作。下图展示了一个原创 2020-06-09 18:35:02 · 823 阅读 · 0 评论 -
Redis学习手册6—数据结构之HyperLogLog
HyperLogLog简介HyperLogLog是一个专门计算集合的基数而创建的概率算法,对于一个给定的集合,HyperLogLog可以计算出这个集合的近似基数:近似基数并非集合的实际基数,它可能会比实际的基数小一点或大一点,但是估算的基数和实际基数之间的误差会处于一个合理的范围内,因此那些不需要知道实际基数或者因为条件限制而无法计算出实际基数的程序就可以把这个近似基数当做集合的实际基数使用。HyperLogLog的优点HyperLogLog的优点在于它计算近似基数所需的内存并不会因为集合的大小而改变原创 2020-06-08 19:25:18 · 282 阅读 · 0 评论 -
Redis学习手册5—数据结构之有序集合
有序集合Redis的有序集合(sorted set)同时具有“有序”和“集合”两种性质,这种数据结构中的每个元素都由一个成员和一个与成员相关联的分值组成,其中成员以字符串方式存储,而分数则以64位双精度浮点数格式存储。下图展示了有序集合的存储结构:与集合一样,有序集合中的每个成员都是独一无二的,同一个有序集合中不会出现重复的成员。与此同时,有序集合的成员将按照各自的分值大小进行排序。有序集合的分值除了可以是数字之外,还可以是字符串 **"+inf"**或者 “-inf”,这两个特殊值分别表示 无穷大原创 2020-06-08 18:00:20 · 368 阅读 · 0 评论 -
Redis学习手册4—数据结构之集合
集合简介Redis的集合(set)键允许用户将任意多个各不相同的元素存储到集合中(类似于Java中的Set),这些数据既可以是文本数据,也可以是二进制数据。集合与列表的区别与上一章中介绍的列表键的区别如下所示:列表可以存储重复元素,而集合只会存储非重复元素,尝试将一个已经存在的元素添加到集合中将被忽略。列表以有序的方式存储元素,而集合以无序的方式存储元素。在执行像LINSERT和LREM这样的列表命令时,即使命令只针对单个列表元素,程序有时也不得不遍历整个列表确定指定的元素是否存在,因此这些命原创 2020-06-07 15:53:02 · 229 阅读 · 0 评论 -
Redis学习手册3—数据结构之列表
列表简介Redis的列表(list)是一种线性的有序结构(类似于Java中的List集合),可以按照元素的推入列表中的顺序来存储元素,这些元素既可以是文字数据,也可以是二进制数据,并且列表中的元素是可以重复的。存储结构Redis的列表键支持左右两端推入(PUSH)或弹出(POP)数据,如下图所示:列表支持的功能Redis为列表提供了丰富的操作命令,通过这些命令,用户可以:将新元素推入列表的左端或者右端移除位于列表最左端或者最右端的元素移除列表最右端的元素,然后把被移除的元素推入另一个列原创 2020-06-07 13:36:47 · 408 阅读 · 0 评论 -
Redis学习手册2—数据结构之散列
前言在上一章《Redis学习手册1—数据结构之字符串》中,我们学习了Redis最基本的数据结构——字符串,但是我们发现,在使用字符串类型键存储具有关联关系的一系列属性时,我们不得不创建若干字符串键,分别存储不同的属性。例如,我们想要使用字符串描述一篇文章的属性:标题、内容、作者和创建时间。如果使用字符串类型键存储这些属性,我们至少需要使用四个字符串类型键来存储,然后定义相同的键的前缀,如:article::1::title、article::1::content、article::1::author、ar原创 2020-06-04 23:25:07 · 383 阅读 · 0 评论 -
Redis学习手册1—数据结构之字符串
字符串字符串(string)键是Redis中最基本的键值对类型,这种类型的键值对会在数据库中把单独的一个键和单独的一个值 关联起来,被关联的键和值可以是普通的文字数据,也可以是图片、视频、音频、压缩文件等更为复杂的二进制数据。字符串类型键的存储结构如下图所示:与键 “message” 相关联的值是 “hello world”与键 “number” 相关联的值是 “10086”与键 “homepage” 相关联的值是 “redis.io”与键 “redis-log.jpg” 相关联的值是 二进原创 2020-06-03 15:23:23 · 307 阅读 · 0 评论 -
Redis模块之RediSearch编译安装
环境Redis 4.0及以上版本cmake安装cmakeCentOS 7yum install -y cmakeUbuntusudo apt-get install cmake下载RediSearchGithubgit clone https://github.com/RedisLabsModules/RediSearch.git码云git clone https://gitee.com/hiro__zhl/RediSearch.git编译先创建bui原创 2020-05-18 19:16:41 · 2424 阅读 · 1 评论 -
Redis模块之RedisJSON
RedisJSON简介RedisJSON是RedisLabs公司开发的一款用于扩展Redis的JSON处理模块,能够让Redis像处理其他类型键一样处理JSON格式的数据,相当于扩展了Redis的数据类型。具体详细介绍请参考 RedisJSONRedis版本要求Redis 4.0 以后提供了模块功能,能够让开发者基于开放的API来扩展Redis自身的功能,因此要想使用Redis的模块功能,至少要求Redis 4.0及以上版本。下载RedisJSON托管于Github,因此我们可以直接下载其源码,如原创 2020-05-18 14:37:46 · 19021 阅读 · 2 评论