redis的lpush,一篇弄明白redis的文章是什么

redis是什么​ redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、lis

redis是什么

redis是一个key-value存储系统。和Memcached一样,支持比较多的存储值类型,包括string、list、set、zset、hash类型。所有这些数据类型都支持丰富的操作,例如推入/弹出、添加/删除、相交、连接和求差,并且所有这些操作都是原子的。基于此,redis支持多种排序方式。与memcached类似,数据缓存在内存中以保证效率。不同的是,redis会定期将更新的数据写入磁盘或者将更改操作写入额外的记录文件,并基于此实现主从(master-slave)同步。

b9ade9c6-17d3-4d98-ad53-ffc669392d94~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=vjeYiuCSinKZBU289VnkA%2FYKFQM%3D

Redis 是一个高性能的键值数据库。 Redis的出现很大程度上弥补了memcached等键/值存储的缺点,在某些情况下可以作为关系数据库的一个非常好的补充。它提供了Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等客户端,并且非常易于使用。 Redis支持主从同步。数据可以从主服务器同步到任意数量的从服务器,并且从服务器也可以是与其他从服务器关联的主服务器。这允许Redis 执行单级树复制。保存可能会导致数据被有意或无意地写入。完全实现了发布/订阅机制,因此一旦从数据库在任何位置同步其树,它就可以订阅频道并接收主服务器完整的消息发布记录。同步有助于提高读取操作的可扩展性和数据冗余。 redis的官方网站地址是redis.io,非常好记。 VMware 目前资助Redis 项目的开发和维护。

redis的特性

1. 完全驻留在内存中,数据实时读取和写入内存,并定期闪回文件。使用单个线程可以避免不必要的上下文切换和竞争条件。 2、正式促销支持10万级同时读写。 3. 重新启动机器后,重新加载模式不会丢失数据。 4. 大数据存储,分布式系统支持,数据一致性保证,方便添加/删除集群节点5. Redis不仅支持简单的k/v类型数据,还支持list、set、zset、hash等,我们还提供结构存储。 6. 灾难恢复- memcache 挂起后无法恢复数据。 Redis数据丢失后,可以通过aof来恢复。 7.虚拟内存——如果物理内存耗尽,Redis可以交换一些值。 8、Redis支持主从模式的数据备份。

redis的架构

7cf128e60af744828ddf367261ff44f3~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=9cxz1OWBS%2BcWayMKhuMK5c%2F8%2BIc%3D

各功能模块说明如下:

文件事件: 处理文件事件,接受来自文件事件的命令请求(读事件),并将命令执行结果返回给客户端(写事件)) 时间事件: 时间事件(更新统计数据、清理、连接节点的同步、 AOF: 命令日志RDB:实际数据持久化Lua 环境: Lua 脚本执行环境为了使Lua 环境满足Redis 脚本功能的要求,在Redis 中,对Lua 环境的改变包括添加函数库、替换随机函数等。保护全局变量。 命令表:运行命令时,根据字符查找对应的命令执行函数。共享对象:主要存储常用值:a.返回值常见的返回值如OK、ERROR、WRONGTYPE等字符b.所有小于redis.h/REDIS_SHARED_INTEGERS的整数(默认1000)。通过预先分配一些公共值对象并在多个数据结构之间共享这些对象,程序避免了重复分配的麻烦。换句话说,这些共同值在内存中只存在一份副本。数据库:Redis 数据库是实际存储数据的地方。当然,数据库本身也存储在内存中。

###redis启动流程

6fcebfb784e54568a261cc2fe1fd8d4f~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=XTnoBgeeEcly0VS302f6TOjda24%3D

redis安装方式

安装Redis有两种常见的方式:yum安装和源码包安装。

yum安装:一般是在线安装。优点是安装方法简单,不易出错。常用的安装yum 源是epel。

安装源码包:首先下载redis xxxx,在自己的系统上编译生成可执行文件,然后运行。优点是它是在您自己的系统上编译的,因此您可以运行它以获得性能。在自己的系统上,即自己的系统上运行redis服务性能更加高效。

区别:路径和启动方式不同,支持的模块不同。

redis程序路径

程序环境:

配置文件:/etc/redis.conf 主程序:/usr/bin/redis-server 客户端:/usr/bin/redis-cliUnit File:/usr/lib/systemd/system/redis.service 数据目录:/var/lib /redis监听:6379/tcp 配置文件:

网络配置项基本配置项持久化相关配置复制相关配置安全相关配置限制相关配置集群相关配置SlowLog相关配置高级配置网络配置项:

绑定IPport PORTprotected-mode 是否启用保护模式。默认启用。如果配置中未指定绑定和代码。如果打开该参数,redis将只在本地访问,拒绝外部访问。 tcp-backlog 定义每个端口的最大侦听队列长度。 unixsockettimeout:连接空闲超时。

您可以通过daemonize 管理Redis 守护进程,将其作为受监控的守护进程、upstart 和systemd 启动。参数是与具体操作系统相关的loglevel、pidfile、logfile、database。设置数据库数量。默认值为16。每个数据库的名称都是从0开始的整数,默认操作数据库为0。切换数据库的方法如下:选择dbid 快照设置:

save900 1 #900秒内改变key则保存save300 10 #300秒内改变10次key则保存save60 10000 #10000次改变key则60秒内保存-writes-on-bgsave-error yes #如果发生错误是否要停止保存rdbcompression yes #使用压缩的rdb文件。压缩rdb文件使用LZF压缩算法。是:压缩,但需要消耗一些CPU。否:无压缩。需要更多磁盘空间。 rdbchecksum yes #是否验证rdb文件。从RDB 格式的第五个版本开始,RDB 文件末尾包含CRC64 校验和。虽然这有利于文件容错,但在保存RDB 文件时会有大约10% 的性能损失,因此如果您正在寻求更高的性能,可以关闭此配置。 dbfilenamedump.rdb #rdb 文件名dir./data 目录。数据库将写入此目录。 RDB和AOF文件也会写入该目录,用于限制相关的配置。

maxclients设置可以连接到redis的最大客户端连接数。 maxmemory bytes Redis 配置的最大内存量。如果内存满了,应该按照maxmemory-policy策略来处理。 maxmemory-policy noeviction 驱逐策略: 易失性-lru、allkeys-lru、易失性-随机、allkeys-random、易失性-ttl、内存容量超过maxmemory 后的noeviction 处理策略。 # volatile-lru:使用LRU算法删除过期的密钥。 # volatile-random: 随机删除有过期日期的键。 # volatile-ttl:根据最近的过期时间(以TTL 为补充)删除即将过期的密钥。 # allkeys-lru:使用LRU 算法删除密钥。 # allkeys-random:随机删除密钥。 # noeviction:不删除key,只返回写入错误。 # 即使redis没有合适的驱逐密钥,上述驱逐策略也会对写入命令返回错误。 Redis将不再接收写请求,只接收获取请求。写入命令为: set setnxmaxmemory-samples 5 # 运行擦除算法时的采样样本数:

#APPEND ONLY MODE ## 默认情况下,redis 使用RDB 持久化。这对于许多应用来说已经足够了。但是,如果Redis 过早崩溃,您可能会丢失几分钟的数据。可以根据保存策略进行持久化,以提供更好的持久化特性。 Redis接收到每一条写入的数据后,都会将其写入到appendonly.aof文件中。 Redis每次启动时,都会先从这个文件中读取数据到内存中,并先忽略RDB文件。 appendonly yes #启动aof模式# aof filename (default: ‘appendonly.aof’)appendfilename ‘appendonly.aof’ # 将数据读入内存,最初忽略RDB文件*appendfsyncRedis支持三种不同模式:no:Redis不执行主动同步操作由操作系统。 Every Second:每秒一次Always:每条语句一次如果Redis 将修改数据库的指令重新保存到AOF 文件中,则AOF 文件的大小继续。这是因为AOF 文件只是存储客户端指令而不合并它们。处理这个问题最简单的方法就是当AOF文件满足一定条件时重写AOF,根据当前内存数据库中的数据写入到临时AOF文件中,写入后再将原来的AOF文件重写替换。足够的。 Redis 重写结合了多个键值对,并用单个命令来表达它们。重写时,写入操作会保存在内存中的重写缓冲区中,临时文件最终会被AOF 文件替换。

no-appendfsync-on-rewrite 否

# aof重写rdb文件时,进行了大量的IO。这时候,在everysec和always aof模式下,当你fsync时,noappendfsync-on-rewrite字段会阻塞很长时间。它被设置为默认设置编号。如果您的应用程序对延迟要求较高,可以将此字段设置为“是”。否则,将其设置为“否”,这对于持久性功能来说是更安全的选择。设置为Yes 意味着新的写操作在重写期间不会进行fsyncd,而是暂时存储在内存中并在重写完成后写入。默认为no,建议为yes。 Linux 上的默认fsync 策略是30 秒。您可能会丢失30 秒的数据。

auto-aof-rewrite-percentage 100 aof 自动重写配置。如果当前aof文件大小超过上次重写aof文件大小的百分比,则会被重写。这意味着当aof文件达到一定大小时,Redis可以调用bgrewrite aof来重写日志文件。当当前AOF 文件大小是上次日志重写获取的AOF 文件大小的两倍(设置为100)时,会自动启动新的日志重写过程。 auto-aof-rewrite-min-size 64mb #设置允许重写的最小aof文件大小,以避免在达到约定的百分比而大小仍然很小的情况下避免重写。

如果同时满足以上两个条件,就会触发aof的重写,并且其增量会比上次aof文件大小增加100%以上,大小达到64MB以上。在恢复期间,redis 会忽略最后一条可能有问题的指令。如果您的aof 文件最终可能不完整,您可以选择退出redis 或导入尽可能多的数据。选择“是”,在导入截断的aof 文件时自动将日志发布并加载到客户端。如果没有,用户必须手动运行redis-check-aof来修复AOF文件。

注意:持久性机制本身不能替代备份。必须制定备份策略,使得Redis服务器启动时使用AOF来恢复数据,并且优先使用AOF。

redis持久存储读取

d3cc0fe1aee04f2b9c3b4312d748b7e0~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=bjxhisTOgq8CsgQqvz%2BIqlPxpGw%3D

redis配置文件

SlowLog相关配置:

lowlog-log-slower-than 10000#如果命令执行超过指定时间,单位为微秒。 Slowlog-max-len 128#慢查询日志长度。当新命令写入日志时,最旧的记录将被删除。高级配置: hash-max-ziplist-entries 512hash-max-ziplist-value 64 设置ziplist 键的最大数量以及每个值的最大空间。

bin redis-benchmark #redis性能测试工具。您可以使用此系统配置测试读写性能。 redis-check-aof # 检查更新日志appendonly.aof是否有更新。可用 redis-check-dump # 用于检查本地数据库的rdb文件 redis-cli #redis命令行操作工具。也可以使用Telnet 根据其明文协议进行操作 redis-sentinel Redis-sentinel 是一个Redis 实例监控管理、通知、实例容灾服务是一个Redis 集群管理工具 redis-server # redis 服务器守护进程启动程序redis-cli命令介绍

默认选择的数据库库是0redis-cli -p 6379 显示当前“数据库库”中所有缓存的keyredis 127.0.0.1:6379 键* 选择数据库库redis 127.0.0.1:6379。 select 8 清除所有缓存的keyredis 127.0.0.1:6379 FLUSHALL 当前“db 库”。 library” “所有缓存键redis 127.0.0.1:6379[8] FLUSHDB set 缓存值redis 127.0.0.1:6379 set keyname keyvalue 获取缓存值redis 127.0.0.1:6379 get keyname 删除缓存值:返回删除次数(0表示未删除) redis 127.0. 0.1:637 9 del keyname 服务器相关命令time:返回当前服务器时间client list: 返回所有连接到服务器的客户端的信息和统计数据。 http://redisdoc.com/server/client_list.htmlclient kill ip:port:关闭地址为ip:port的客户端save:将数据同步保存到磁盘。 bgsave:异步将数据保存到磁盘。 lastsave:返回最后一次成功将数据保存到磁盘的Unix 时间戳。 shhundown:同步将数据保存到磁盘并关闭服务。 info:提供服务器信息和统计信息。重置一些统计数据info 命令config get:获取配置文件信息。配置集:无需重启即可动态调整Redis服务器配置。 可以使用CONFIG GET* config rewrite: Redis Rewrite 命令列出可修改的配置参数。服务器指定的redis.conf文件Monitor:实时转储收到的请求smileof:更改复制策略设置debug:sleep segfaultslowlog get 获取慢查询日志。 throwlog len 获取慢查询日志的数量。 – 1010 b9b91bd182214165945ce14426e20038~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=WoIbKRPYF6Uy5d8NDiJeAeh8M%2Fw%3D

Redis 内部使用redisObject 对象来表示所有键和值。 redisObject的主要信息如上图所示。 type表示值对象的具体数据类型,encoding是不同数据类型在redis内部的存储方式。例如:type=string表示该值存储为常规字符串,对应的编码可以是raw或int。如果这是一个int,则意味着实际的Redis内部是根据数字类型来存储和表示字符串的。当然,假设是字符串可以用数字表示,比如:’123”456’这样的字符串。 Redis 键值可以是多种数据类型,例如字符串、哈希表、列表、集合和有序集合。

KEY 操作命令

存在(键):检查键是否存在。 del(键):删除。 keytype(key):返回值的类型。 keys(pattern):返回满足指定模式的所有键。 randomkey:返回键中的随机键。 spacerename( oldname, newname): 重命名keydbsize: 返回当前数据库中键的数量expire: 设置键的活动时间ttl: 获取键的活动时间move(key, dbindex ): 将键从当前数据库移动到dbindex数据库flashdb:删除当前选定数据库中的所有键flashall:删除所有数据库中的所有键应用场景1:字符串是最常见的数据类型,常规的键/值存储都可以属于此类。这意味着您可以获得Memcached 目前的全部功能,而且效率更高。您还可以享受Redis 的计划持久性、操作日志记录和复制功能。 Redis除了提供与Memcached相同的get、set、incr、decr等操作外,还提供以下操作:

字符串操作命令

set(key, value):为数据库中名为key 的字符串分配一个值。 valueget(key):返回数据库中名为key的字符串的值。 getset(key, value):将最后一个值赋值给名为key key1, key2,…, key N 的字符串mget((key)):返回库中多个字符串的值setnx(key, value):添加字符串、名称is key, value is valuesetex(key, time), value):添加字符串到库,设置过期时间mset(key N, value N):添加多个字符串一次性设置值msetnx(key N, value N) :如果所有名为key i 的字符串都不存在incr(key):名为key 的字符串加1。操作incrby(key,integer):名为key的字符串递增整数。 decr(key):将名为key 的字符串减1。操作decrby(key, integer):递增指定的字符串。 key 递减integerappend(key, value):将名为key value 的字符串追加到字符串value 后面substr(key, start, end):名为key 的字符串value 的子字符串返回应用场景:Memcached 经常会做以下事情:我将一些结构化信息打包成HashMap,在客户端序列化,然后存储为字符串值,比如用户的昵称、年龄、性别、积分等。此时你需要更改其中之一

一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。
对Hash操作的命令
hset(key, field, value):向名称为key的hash中添加元素fieldhget(key, field):返回名称为key的hash中field对应的valuehmget(key, (fields)):返回名称为key的hash中field i对应的valuehmset(key, (fields)):向名称为key的hash中添加元素fieldhincrby(key, field, integer):将名称为key的hash中field的value增加integerhexists(key, field):名称为key的hash中是否存在键为field的域hdel(key, field):删除名称为key的hash中键为field的域hlen(key):返回名称为key的hash中元素个数hkeys(key):返回名称为key的hash中所有键hvals(key):返回名称为key的hash中所有键对应的valuehgetall(key):返回名称为key的hash中所有的键(field)及其对应的valued8858a5a67c1462381f4fba99dd17fff~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=fRHeyd8LfThyj0pyRlehhVYWErU%3D
ba12e95bc28a4ae290e8cebf2084db76~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=hOLt7RH5MAV1z1JazTnttb8NI28%3D
b006f77b77f04626902a073c808c617d~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=DuPm11%2FcX6iijq6q56PxpZQUsbo%3D
573b39d2d76b40c1b12466d28c2737ab~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=xm%2BvVlRhnUOh1aGjoA6Cy1MMhso%3D
28ed2be212a44a7ca709daf6e0c2a3a9~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=FGImhmu7J44wdV%2Fw7n07KAlGov8%3D
Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。我们在看完一条微博之后,常常会评论一番,或者看看其他人的吐槽。每条评论的记录都是按照时间顺序排序的
对List操作的命令
rpush(key, value):在名称为key的list尾添加一个值为value的元素lpush(key, value):在名称为key的list头添加一个值为value的 元素llen(key):返回名称为key的list的长度lrange(key, start, end):返回名称为key的list中start至end之间的元素ltrim(key, start, end):截取名称为key的listlindex(key, index):返回名称为key的list中index位置的元素lset(key, index, value):给名称为key的list中index位置的元素赋值lrem(key, count, value):删除count个key的list中值为value的元素lpop(key):返回并删除名称为key的list中的首元素rpop(key):返回并删除名称为key的list中的尾元素blpop(key1, key2,… key N, timeout):lpop命令的block版本。brpop(key1, key2,… key N, timeout):rpop的block版本。rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能
对Set操作的命令
sadd(key, member):向名称为key的set中添加元素membersrem(key, member) :删除名称为key的set中的元素memberspop(key) :随机返回并删除名称为key的set中一个元素smove(srckey, dstkey, member) :移到集合元素scard(key) :返回名称为key的set的基数sismember(key, member) :member是否是名称为key的set的元素sinter(key1, key2,…key N) :求交集sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合sunion(key1, (keys)) :求并集sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合sdiff(key1, (keys)) :求差集sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合smembers(key) :返回名称为key的set的所有元素srandmember(key) :随机返回名称为key的set的一个元素Sorted Set
常用命令:zadd,zrange,zrem,zcard,zcount等
使用场景:
Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。另外还可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。ZADD page_rank 9 baidu.com 8 bing.com 10 google.com

redis主从复制

Redis的复制方式有两种,一种是主(master)-从(slave)模式,一种是从(slave)-从(slave)模式,因此Redis的复制拓扑图会丰富一些,可以像星型拓扑,也可以像个有向无环。一个Master可以有多个slave主机,支持链式复制;Master以非阻塞方式同步数据至slave主机;
65f41e5f76874d82a0528681deface3b~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=6LBISyCgTJtT8R6N756tv2CRMSg%3D
复制优点
通过配置多个Redis实例,数据备份在不同的实例上,主库专注写请求,从库负责读请求,这样的好处主要体现在下面几个方面1、高可用性在一个Redis集群中,如果master宕机,slave可以介入并取代master的位置,因此对于整个Redis服务来说不至于提供不了服务,这样使得整个Redis服务足够安全。2、高性能在一个Redis集群中,master负责写请求,slave负责读请求,这么做一方面通过将读请求分散到其他机器从而大大减少了master服务器的压力,另一方面slave专注于提供读服务从而提高了响应和读取速度。3、水平扩展性通过增加slave机器可以横向(水平)扩展Redis服务的整个查询服务的能力。复制需要解决的问题
复制提供了高可用性的解决方案,但同时引入了分布式计算的复杂度问题,认为有两个核心问题:1、数据一致性问题:如何保证master服务器写入的数据能够及时同步到slave机器上。2、读写分离;如何在客户端提供读写分离的实现方案,通过客户端实现将读写请求分别路由到master和slave实例上。上面两个问题,尤其是第一个问题是Redis服务实现一直在演变,致力于解决的一个问题:复制实时性和数据一致性矛盾Redis提供了提高数据一致性的解决方案,一致性程度的增加虽然使得我能够更信任数据,但是更好的一致性方案通常伴随着性能的损失,从而减少了吞吐量和服务能力。然而我们希望系统的性能达到最优,则必须要牺牲一致性的程度,因此Redis的复制实时性和数据一致性是存在矛盾的。

redis主从复制

1、slave向master发送sync命令。2、master开启子进程来讲dataset写入rdb文件,同时将子进程完成之前接收到的写命令缓存起来。3、子进程写完,父进程得知,开始将RDB文件发送给slave。master发送完RDB文件,将缓存的命令也发给slave。master增量的把写命令发给slave。
值得注意的是,当slave跟master的连接断开时,slave可以自动的重新连接master,在redis2.8版本之前,每当slave进程挂掉重新连接master的时候都会开始新的一轮全量复制。如果master同时接收到多个slave的同步请求,则master只需要备份一次RDB文件。

实战示例

一、准备好4台机器
192.168.42.150 redis-node1 #主192.168.42.151 redis-node2 #从192.168.42.152 redis-node3 #从192.168.42.153 redis-node4 #从二、安装redis,配置好基本配置
yum install rediscp /etc/redis.conf{,.back}vim redis.confdaemonize yesbind 0.0.0.0 #改为各个节点的IP三.依照上面设定的从主机,在从主机配置文件中开启从配置(需要配置3台机器):
### REPLICATION ###slaveof 192.168.1.29 6379 #主节点地址,<host> <port>#masterauth <master-password> #如果设置了访问认证就需要设定此项。slave-server-stale-data yes #当slave与master连接断开或者slave正处于同步状态时,如果slave收到请求允许响应,no表示返回错误。slave-read-only yes #slave节点是否为只读。slave-priority 100 #设定此节点的优先级,是否优先被同步。四、redis主从复制测试
set master-slave ok五、高级配置
一个RDB文件从master端传到slave端,分为两种情况:1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。repl-diskless-sync no #默认不使用diskless同步方式repl-diskless-sync-delay 5 #无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒repl-ping-slave-period 10 #slave端向server端发送pings的时间区间设置,默认为10秒repl-timeout 60 #设置超时时间*slave-priority 100复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;min-slaves-to-write 3 #主节点仅允许其能够通信的从节点数量大于等于此处的值时接受写操作;min-slaves-max-lag 10 #从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作;Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时,Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
6467234f32db4a02870dd8476549df6b~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717812434&x-signature=Nxs9DdKgEALosavxaKTTe7gH0nM%3D
一、配置sentinel
只需在sentinel节点的配置文件中修改以下配置即可:
port 26379#sentinel announce-ip 1.2.3.4 #默认监听在0.0.0.0 所以此处可以注释。dir “/tmp”sentinel monitor mymaster 192.168.1.29 6379 1 #sentinel moitor <master-name> <ip> <redis-port> <法定人数quorum>#设定master节点的*名称*和位置,法定人数表示多少台sentinel节点认同才可以上线。<quorum>表示sentinel集群的quorum机制,即至少有quorum个sentinel节点同时判定主节点故障时,才认为其真的故障s_down: subjectively downo_down: objectively downsentinel down-after-milliseconds mymaster 5000 #如果联系不到节点5000毫秒,我们就认为此节点下线。sentinel failover-timeout mymaster 60000 #设定转移主节点的目标节点的超时时长。sentinel auth-pass <master-name> <password> #如果redis节点启用auth,此处也要设置password。sentinel parallel-syncs <master-name> <numslaves> #指在failover过程中,能够被sentinel并行配置的从节点的数量;一些关于sentinel的命令:
redis-cli -h SENTINEL_HOST -p SENTINEL_PORTsentinel masters <master-name> #查看此复制集群的主节点信息。sentinel slaves <master-name> #查看此复制集群的从节点信息。sentinel failover <node-name> #切换指定的节点为节点为主节点。

原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/84941.html

(0)
小条's avatar小条
上一篇 2024年6月1日 上午10:06
下一篇 2024年6月1日 上午10:07

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注