![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 94
N-1-萘乙基二胺盐酸盐
软件工程
展开
-
Lua 脚本语法学习
例如,如果要为一个 table 扩展加号(+)运算功能,则可重写该 table 元表的__add 元方法,而具体的运算规则,则是定义在该重写的元方法中的。由于协同函数的本质就是函数,所以协同函数的调用方式就是标准的函数调用方式。从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。table.maxn(table)该函数返回指定 table 的数组中的最大索引值,即数组包含元素的个数。原创 2023-06-17 14:37:08 · 4178 阅读 · 0 评论 -
Redis 分布式集群操作
可以将新的节点添加到系统中。添加成功后,通过 redis-cli -c -p 6386 cluster nodes 命令可以看到其它 master 节点都分配有 slot,只有新添加的 master 还没有相应的 slot。可以看到当写入name的时候redis会去计算name的hash值,hash值为5798,对应节点的端口号为6381,于是自动重定向到6381的节点上存储数据。需要添加两个新的节点:端口号为 6386 的节点为 master节点,其下会有一个端口号为 6387 的 slave 节点。原创 2023-06-13 14:42:10 · 1203 阅读 · 0 评论 -
分布式系统常见的数据分区算法
带有限负载的一致性哈希算法也有一个问题,那就是每台服务器的性能配置可能存在不一样,如果规定数量过小的话,对于配置高的服务器来说有点浪费,这是因为服务器之间可能存在差异,叫做服务器之间的异构性,为了解决服务器之间的异构性问题,引入了一种叫做带虚拟节点的一致性哈希算法,带虚拟节点的一致性哈希算法核心思想是:根据每个节点的性能为每个节点划分不同数量的虚拟节点,即。然后选取数据本身或可以代表数据特征的数据的一部分作为 key,计算 hash(key)与节点数量 N 的模,该计算结果即为该数据的存储节点的序号。原创 2023-06-10 12:09:15 · 1163 阅读 · 1 评论 -
哨兵机制原理详解
当Sentinel通过频道信息发现一个新的Sentinel时,它不仅会为新Sentinel创建相关记录信息,还会创建一个连向新Sentinel的命令连接,而新Sentinel也同样会创建连向这个Sentinel的命令连接,最终监视同一master的多个Sentinel将形成相互连接的网络。在 Sentinel 的配置文件中有 master 的IP和端口号,所以 Sentinel 在初始时是知道 master 节点的位置,于是 Sentinel 可以向 master 建立命令连接和订阅连接。原创 2023-05-20 17:38:53 · 1092 阅读 · 0 评论 -
Redis 哨兵模式的实现详解
哨兵模式是Redis的高可用方式,哨兵节点是特殊的redis服务,不提供读写服务,主要用来监控所有的redis节点。哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点挂掉时,哨兵会第一时间感知到,并且在slave节点中重新选出来一个新的master,然后将新的master信息通知给client端,从而实现高可用。原创 2023-05-18 22:27:37 · 2263 阅读 · 5 评论 -
Redis---订阅和发布
消息系统中的订阅者订阅了某类消息后,只要存储系统中存在该类消息,其就可不断的接收并消费这些消息。而 Redis 构成的消息系统中,发布/订阅的消息都是以频道 Channel 分类的。 Redis的发布与订阅功能可以让客户端通过广播方式,将消息(message)同时发送给可能存在的多个客户端,并且发送消息的客户端不需要知道接收消息的客户端的具体信息。说明:如果没有频道被指定,也就是一个无参数的 UNSUBSCRIBE 命令被执行,那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订。原创 2023-05-14 16:55:14 · 1871 阅读 · 0 评论 -
Redis的主从集群搭建与配置
如果真需要设置,一定要每个主机的密码都设置为相同的。集群中的 Master 节点负责处理客户端的读写请求,而 Slave 节点仅能处理客户端的读请求。如果其原本就有下一级的 Slave,那么,其就直接变为了这些 Slave 的真正的 Master 了。 Nagle 算法的工作原理是,网络在接收到要发送的数据后,并不直接发送,而是等待着数据量足够大(由 TCP 网络特性决定)时再一次性发送出去。不过,上一级 Slave 的状态仍为 Slave,只不过,其是更上一级的 Slave。原创 2023-05-11 21:50:54 · 910 阅读 · 0 评论 -
AOF 持久化详解
是把所有对内存进行修改的指令(写操作)以独立日志文件的方式进行记录,重启时通过执行 AOF 文件中的 Redis 命令来恢复数据。原创 2023-05-09 22:19:09 · 2332 阅读 · 1 评论 -
RDB 持久化详解
Redis 是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将 Redis 中的数据以某种形式(数据或命令)从内存保存到硬盘。当下次 Redis 重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。Redis 的持久化机制有两种:RDB(Redis Data Base) 内存快照AOF(Append Only File) 增量日志。原创 2023-04-27 16:29:02 · 1413 阅读 · 0 评论 -
Redis---事务
因为Redis的事务在EXEC命令执行之前并不会产生实际效果,所以很多Redis客户端都会使用流水线去包裹事务命令,并将入队的命令缓存在本地,等到用户输入EXEC命令之后,再将所有事务命令通过流水线一并发送至服务器,这样客户端在执行事务时就可以达到“打包发送,打包执行”的最优效果。此后客户端 B 对该 key 的值进行了修改,这个修改不仅修改了 key 的 value 本身,同时也增加了 version 的值,例如使其 version 变为了 2.0,并将该 version 记录到了该 key信息中。原创 2023-04-25 19:50:26 · 86 阅读 · 0 评论 -
Redis---基准测试
在Redis安装完毕后会自动安装一个redis-benchmark测试工具,是一个压力测试工具,模拟 N 个客户端同时发出 M 个请求,用于测试 Redis 的性能。使用 redis-benchmark --help 来查看基准参数。当以下值为默认值的时候,则可以省略。序号选项描述默认值1-h指定服务器主机名。127.0.0.12-p指定服务器端口63793-s指定服务器 socket4-c指定并发连接数505-n指定请求数1000006-d。原创 2023-04-16 17:31:30 · 445 阅读 · 0 评论 -
Redis---有序集合
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。对于相同分数的成员会按照字母序的顺序进行排序。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。原创 2023-04-13 18:00:53 · 922 阅读 · 0 评论 -
Redis---集合
Redis 存储数据的 Value 可以是一个 Set 集合,且集合中的每一个元素均 String 类型。Set与 List 非常相似,但不同之处是 Set 中的元素具有无序性与不可重复性,而 List 则具有有序性与可重复性。集合对象的编码可以是 intset 或者 hashtable。集合中最大的成员数为 232- 1 (4294967295, 每个集合可存储40多亿个成员)。原创 2023-04-10 17:19:05 · 1022 阅读 · 0 评论 -
Redis---列表
Redis中列表类型是用来存储多个有序的字符串,列表中的每个字符串成为元素(element),一个列表最多可以存储2- 1个元素。列表中的数据会按照插入顺序进行排序。不过,该列表的底层实际是一个,所以对列表表头与表尾的操作性能较高,但对中间元素的插入与删除的操作的性能相对较差。在一般要求顺序的业务中,一般都用list来实现。原创 2023-04-09 18:51:16 · 560 阅读 · 0 评论 -
Redis---散列命令
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 2- 1 键值对(40多亿)。原创 2023-04-08 18:03:37 · 218 阅读 · 0 评论 -
Redis---字符串命令
该命令类似于使用set命令并设置过期时间,不同之处是,setex和psetex是一个原子性操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增一/减一操作。只有整数才会使用int,如果是浮点数,Redis内部会先将浮点数转换为字符串,然后保存字符串值。说明:如果 value 字符串中带有空格,则该字符串需要使用双引号或单引号引起来,否则会认为 set 命令的参数数量不正确,报错。原创 2023-04-06 19:04:04 · 267 阅读 · 0 评论 -
Redis---操作key的命令
keysexistsdelrenamemovetypeexpire 与 pexpirettl 与 pttlpersistrandomkeyscan格式:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]功能:用于迭代数据库中的数据库键。说明:使用间断的、负数、超出范围或者其他非正常的游标来执行增量式迭代不会造成服务器崩溃。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。原创 2023-04-02 11:02:03 · 500 阅读 · 0 评论 -
Redis配置文件笔记
SYN_RECEIVED 队列中存放的是未完成三次握手的连接,ESTABLISHED 队列中存放的是已完成三次握手的连接。这里设置的值就是这个队列的长度。为什么要指定样本数量,因为实际场景可能有10万个key,如果把每个key都遍历一遍,效率会很低,只能遍历一部分数量的Key,当需要淘汰的key的数量达到指定数量的时候就停止遍历。官方文档:多线程默认是关闭的,但是我们建议打开,当你的机器的CPU核数超过4个时,并且要至少预留一个线程去完成持久化(CPU核数超过4,io-threads最多为3)。原创 2023-04-01 18:06:11 · 231 阅读 · 0 评论