redis入门之常用特性

本文介绍了Redis的常用特性,包括管道pipeline、事务、清除算法(LRU和LFU)、持久化(RDB和AOF)、Sentinel与主从复制、以及分区。详细阐述了各特性的概念、工作原理和配置选项,帮助读者深入理解Redis的高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

Redis除了提供string、hash、list、set、sort set这些数据类型的内存存储和提供对应操作外,还提供了 管道、事务、发布订阅、清除算法、持久化策略、哨兵、分区等高级特性。

一、管道pipeline

redis是基于TCP协议的,管道是指可以在客户端一次性输入多条指令,合并在管道中一次性发送并获得返回值。这样做的好处是减少了请求次数。

$(echo -en "PING\r\n SET w3ckey redis\r\nGET w3ckey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379

二、事务

首先,redis的事务是非完整的,不提供回滚功能,只保证在出现错误的情况下后续操作不会继续执行。也可以使用watch这种方式在事务提交前判断数据是否已被修改,实现类似并发安全操作。

事务相关指令:
MULTI 开启事务
EXEC 提交事务
DISCARD 取消事务
WATCH

三、清除算法

redis提供了以下配置清除算法:
noeviction 不清除,在内存不够的时候抛出异常(一般是作为缓存数据库才会配置)
allkeys-lru 所有数据使用lru
volatile-lru 设置了有效期的数据使用lru
allkeys-lfu 所有数据使用lfu
volatile-lfu 设置了有效期的数据使用lfu
volatile-ttl 根据失效时间删除

LRU和LFU

LRU是基于使用时间排序,LFU是基于使用次数排序

过期数据的清理

分为主动清理和被动清理
被动清理:客户端查询的时候清理
主动清理:每段时间随机抽取部分数据校验,如果超过25%就全盘扫描清理。

四、持久化

RDB

手动和自动方式,save阻塞方式和bgsave非阻塞方式。
特点:快、写时复制,拷贝的数据为创建时的快照内容。
缺点:会丢失更多的数据,需要额外空间保存增量数据,只有一个dump.rdb,需要运维自己归档。
基于子进程创建指针镜像的方式复制数据,父进程对数据的修改对子进程不可见,只需要将父进程修改的数据指向新的指针引用就行,需要额外的空间保存增量更新的数据。

配置说明

save 900 1
save 300 10
save 60 10000
60秒内达到10000条就持久化,否则等300秒有10条就持久化或者等900秒有更新就持久化

AOF

4.0之前:会合并或删除部分重复和抵消指令,但是会一直追加保存操作记录,在运行时间长了之后恢复成本也会越来越大(空间和时间)。
4.0之后:使用混合日志方式,在达到一定大小之后会以RDB保存,同时增量操作会以append的方式追加进AOF。

配置说明

appendonly yes
appendfilename “appendonly.aof”
appendfsync always 每有一条更新就刷新
appendfsync everysec 每秒刷新
appendfsync no 只有buff满了才刷新
no-appendfsync-on-rewrite 配置no表示当redis执行rdb操作时,aof不执行刷新操作

AOF配置不同也可能会出现数据丢失问题,一种是AOF的刷新级别,一种是进行RDB复制的时候是否支持刷新磁盘。

五、sentinel和主从复制

sentinel

redis支持以sentinel方式运行,启动前需要在配置文件sentinel.conf配置属性,包括port和监控的主机地址以及投票通过票数。sentinel支持同时监控多个主从集群,同时,sentinel还有自动发现和相互注册的功能,通过与主机通讯可以知道其它从机的位置,同时通过监听主机向其它sentinel广播可以知道其它sentinel的位置并互相注册。sentinel通过修改redis配置方式实现自动切换,同时可以在redis恢复时自动将其加入集群。

配置

semtinel.conf
sentinel monitor mymaster1 127.0.0.1 6389 2

主从复制

redis的主从复制有下面三点机制:

  1. master与slave连接正常时,每次更新时(包括用户更新、失效、回收等),master会发送同步到slave更新。
  2. 当网络超时或短暂断开时,在master上会保存数据偏移量以及少量的buffer,在连接恢复正常的时候将buffer更新操作追加到slave。
  3. 当更新的数据超过buffer大小,slave会进行全量同步,需要master创建当前快照并发送给slave,后续操作append的方式发送。

配置

关闭AOF:appendonly no
从机禁用写:readonly yes
配置有偏移量时是否对外提供服务: replica-serve-stale-date
是否先写磁盘在发送网络还是直接发送网络:repl-diskless-sync
最大偏移数据buffer:repl-backlog-size 1mb

六、分区

根据算法不同有:业务分区、hash取模分区、范围分区、radom、一致性hash。
根据计算端不同有:客户端路由、代理路由、服务端路由。

优点:解决单机的性能瓶颈(io、cpu、内存)
缺点:无法支持跨区事务和跨区多key查询。 (使用hash tag将同批数据落到同一分区可以一定程度解决)

  1. 使用客户端路由一般是跟业务分区使用,根据项目实际业务需要实现定制的路由规则。
  2. 使用代理路由常用的有 twemproxy、predixy等,需要安装对应代理,并根据要求配置,优点是将路由计算和高可用监控以及连接管理都交由代理管理,需要保证代理的高可用。
  3. 使用redis提供的cluster实现分区,cluster会为每个redis实例分配preshading槽位,同时每个redis都知道自己所有的分片位和其它redis的分片位,客户端只要随机访问某一台redis服务,redis会计算判断是否是自己的数据,如果不是,会帮助客户端重定向到对应redis。同时cluster还提供了高可用和reshading重新分配的方式解决数据倾斜。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值