redis一:redis5基础知识

redis5学习

简介和安装

官网介绍

Redis是开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。Redis提供数据结构,例如
字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,地理空间索引和流。Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过以下方式提供高可用性:Redis
Sentinel和Redis Cluster自动分区。 为了获得最佳性能,Redis使用
内存中的数据集。根据您的用例,可以通过定期将数据集转储到磁盘
或通过将每个命令附加到基于磁盘的日志来持久化数据。如果只需要功能丰富的网络内存缓存,则还可以禁用持久性。
Redis还支持异步复制,具有非常快速的非阻塞式首次同步,以及在网络拆分时具有部分重新同步的自动重新连接。 其他功能包括: 交易次数
发布/订阅 Lua脚本 生存时间有限的键 LRU逐出钥匙 自动故障转移

应用场景

  1. 配合关系型数据库做高速缓存
    高频次,热门访问的数据,降低数据库IO
    分布式架构,做session共享
  2. 多样的数据结构存储持久化数据
    在这里插入图片描述

安装

下载地址: https://redis.io/download

一、安装gcc依赖
由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装

 [root@localhost local]# yum install -y gcc 

二、下载并解压安装包

[root@localhost local]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz

[root@localhost local]# tar -zxvf redis-5.0.3.tar.gz

三、cd切换到redis解压目录下,执行编译

[root@localhost local]# cd redis-5.0.3

[root@localhost redis-5.0.3]# make

四、安装并指定安装目录

[root@localhost redis-5.0.3]# make install PREFIX=/usr/local/redis
  • 将配置文件redis.conf、sentinel.conf及utils文件夹复制到redis安装目录/usr/local/redis
	cd /usr/local/redis-5.0.3

	cp redis.conf /usr/local/redis/redis.conf
	 
	cp sentinel.conf /usr/local/redis/sentinel.conf
	 
	cp -r utils/ /usr/local/redis/utils

五、启动服务
后台启动
从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录

[root@localhost redis-5.0.3]# cd /usr/local/redis/bin/
[root@localhost bin]# cp /usr/local/redis-5.0.3/redis.conf /usr/local/redis/bin/

修改 redis.conf 文件内容

[root@localhost bin]# vi redis.conf

// 修改以下内容

将bind 后 127.0.0.1 改为 127.0.0.1 内网IP	# 为安全起见,请勿使用 0.0.0.0
protected-mode yes 改为 protected-mode no	# 关闭保护模式
daemonize no 改为 daemonize yes	# 开启守护进程
requirepass 123456	# 自行设置密码,例:123456

后台启动*

[root@localhost bin]# ./redis-server redis.conf

查看redis是否启动成功

[root@localhost bin]# ps -ef | grep redis

启动成功
在这里插入图片描述
六、设置开机启动
添加开机启动服务

[root@localhost bin]# vi /etc/systemd/system/redis.service

复制粘贴以下内容:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

注意:ExecStart配置成自己的路径
设置开机启动

[root@localhost bin]# systemctl daemon-reload

[root@localhost bin]# systemctl start redis.service

[root@localhost bin]# systemctl enable redis.service

创建 redis 命令软链接

[root@localhost ~]# ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis

测试redis
在这里插入图片描述
服务操作命令

systemctl start redis.service   #启动redis服务

systemctl stop redis.service   #停止redis服务

systemctl restart redis.service   #重新启动服务

systemctl status redis.service   #查看服务当前状态

systemctl enable redis.service   #设置开机自启动

systemctl disable redis.service   #停止开机自启动

redis数据类型

Redis常用命令

keys *查看当前库所有key    (匹配:keys *1)
exists key判断某个key是否存在
type key 查看你的key是什么类型
del key       删除指定的key数据
unlink key   根据value选择非阻塞删除
仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。
expire key 10   10秒钟:为给定的key设置过期时间
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
scan 渐进式遍历建  提供三个参数  第一个是cursor整数值(游标),第二个是key的正则模式, 第三个是遍历的limit hint(查找的条数) 
		scan命令是一个基于游标的迭代器。这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,以此来延续之前的迭代过程。
		SCAN cursor [MATCH pattern] [COUNT count] The default COUNT value is 10
		scan 0 match key1111* count 20   表示从游标为0开始查找  key1111为前缀的key  每次扫描20条记录
			下一次扫描需要用到  第一次返回游标开始  比如返回游标 1000 则下一次扫描命令为
		scan 1000 match key1111* count 20	
			直到返回的游标为0时和第一次扫描的游标相同  说明所有redis的数据都扫描完成

Redis字符串(String)

介绍
String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
常用命令

SET key value设置指定 key 的值
GET key     获取指定 key 的值。
GETRANGE key start end 返回 key 中字符串值的字符
GETSET key value     将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
MGET key1 key2..  获取所有(一个或多个)给定 key 的值。
MSET key value key value ...同时设置一个或多个 key-value 对。
SETEX key seconds value  将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
SETNX key value   只有在 key 不存在时设置 key 的值。
SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
incr key 自增   可以在key后面加上数字代表自增的步长
decr key 自减
append key value 在key的值添加value  类似字符串拼接

Redis列表(List)

常用命令

LPOP key:Removes and returns the first element of the list stored at key.	
RPOP key:Removes and returns the last element of the list stored at key.
LLEN key  获取列表长度		
LPUSH key value1 [value2] 将一个或多个值插入到列表 然后往左排
RPUSH key value1 [value2] 将一个或多个值插入到列表 然后往右排
LINDEX key index 通过索引获取列表中的元素
LRANGE key start stop  获取列表指定范围内的元素
LREM key count value  移除列表中 count个 等于value值的元素
LSET key index value  通过索引设置列表元素的值
实现队列(先进先出):
	lpush books java python go
		rpop books
		或者
	rpush books java python go
		lpop books
实现栈(后进先出):
	lpush books java python go
	lpop books

Redis集合(Set)
常用命令

sadd <key><value1><value2> ..... 
将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
smembers <key>取出该集合的所有值。
sismember <key><value>判断集合<key>是否为含有该<value>值,有1,没有0
scard<key>返回该集合的元素个数。
srem <key><value1><value2> .... 删除集合中的某个元素。
spop <key>随机从该集合中吐出一个值。
srandmember <key><n>随机从该集合中取出n个值。不会从集合中删除 。
smove <source><destination>value把集合中一个值从一个集合移动到另一个集合
sinter <key1><key2>返回两个集合的交集元素。
sunion <key1><key2>返回两个集合的并集元素。
sdiff <key1><key2>返回两个集合的差集元素(key1中的,不包含key2中的)

Redis哈希(Hash)
常用命令

HSET key field value  将哈希表 key 中的字段 field 的值设为 value 。
HMSET key field1 value1 [field2 value2 ]同时将多个 field-value (域-值)对设置到哈希表 key 中。
HGETALL key 获取在哈希表中指定 key 的所有字段和值
HGET key field  获取存储在哈希表中指定字段的值。
HMGET key field1 [field2]  获取所有给定字段的值
HDEL key field1 [field2] 删除一个或多个哈希表字段
HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。
HLEN key  获取哈希表中字段的数量
HKEYS key 获取所有哈希表中的字段
HVALS key   获取哈希表中所有值

Redis有序集合Zset(sorted set)

常用命令

zadd  <key><score1><value1><score2><value2>…
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
zrange <key><start><stop>  [WITHSCORES]   
返回有序集 key 中,下标在<start><stop>之间的元素
带WITHSCORES,可以让分数一起和值返回到结果集。
zrangebyscore key minmax [withscores] [limit offset count]
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 
zrevrangebyscore key maxmin [withscores] [limit offset count]               
同上,改为从大到小排列。 
zincrby <key><increment><value>      为元素的score加上增量
zrem  <key><value>删除该集合下,指定值的元素 
zcount <key><min><max>统计该集合,分数区间内的元素个数 
zrank <key><value>返回该值在集合中的排名,从0开始。

redis配置详解

redis.conf
Units单位

在这里插入图片描述
配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit大小写不敏感

INCLUDES包含
在这里插入图片描述
类似jsp中的include,多实例的情况可以把公用的配置文件提取出来

网络相关配置

在这里插入图片描述
包含有以下配置:
bing
默认情况bind=127.0.0.1只能接受本机的访问请求,不写的情况下,无限制接受任何ip地址的访问
生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉。
注释前:

在这里插入图片描述
注释后:
在这里插入图片描述
protected-mode
redis保护模式
在这里插入图片描述
如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的响应。

Port
端口号;默认6379

tcp-backlog
设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列。
在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。
**注意:**Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值(128),所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog(128)两个值来达到想要的效果
在这里插入图片描述
timeout
一个空闲的客户端维持多少秒会关闭,0表示关闭该功能。即永不关闭。

在这里插入图片描述
tcp-keepalive
对访问客户端的一种心跳检测,每个n秒检测一次。单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60
在这里插入图片描述

GENERAL通用

daemonize
是否为后台进程,设置为yes
在这里插入图片描述
pidfile
存放pid文件的位置,每个实例会产生一个不同的pid文件

loglevel
指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为notice
四个级别根据使用阶段来选择,生产环境选择notice 或者warning

logfile
日志文件名称
在这里插入图片描述
databases
设定库的数量 默认16,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
在这里插入图片描述

SECURITY 安全

requirepass
设置密码
在这里插入图片描述
访问密码的查看、设置和取消
在命令中设置密码,只是临时的。重启redis服务器,密码就还原了。
永久设置,需要再配置文件中进行设置。

在这里插入图片描述

CLIENTS 客户端

maxclients
设置redis同时可以与多少个客户端进行连接。
默认情况下为10000个客户端。
如果达到了此限制,redis则会拒绝新的连接请求,并且向这些连接请求方发出“max number of clients reached”以作回应。
在这里插入图片描述

MEMORY MANAGEMENT 内存管理

maxmemory

  • 建议必须设置,否则,将内存占满,造成服务器宕机
  • 设置redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。
  • 如果redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”,那么redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。
  • 但是对于无内存申请的指令,仍然会正常响应,比如GET等。如果你的redis是主redis(说明你的redis有从redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,才不用考虑这个因素。

在这里插入图片描述
maxmemory-policy
缓存达到上面设置的maxmemory值后采取的淘汰策略
在这里插入图片描述

  • noeviction:不会继续服务写请求(del请求可以继续服务),读请求可以继续进行。这样可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默认的淘汰策略
  • volatile-lru
    尝试淘汰设置了过期时间的key,最少使用的key优先被淘汰。没有设置过期时间的key不会被淘汰,这样可以保证需要持久化的数据不会突然丢失。
  • volatile-ttl 跟上面一样 除了淘汰的策略不是lru,而是kye的剩下寿命ttl的值,ttl的值越小越优先被淘汰
  • volatile-random 跟上面一样 不过淘汰的key是过期key集合中随机的key
  • allkeys-lru 区别于volatile-lru
    这个策略要淘汰的key对象是全体的key集合,而不只是过期的key集合。这意味着没有设置过期时间的key也会被淘汰
  • allkeys-random 跟上面一样 不过淘汰的策略是随机的key

maxmemory-samples
在这里插入图片描述

  • 设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小,redis默认会检查这么多个key并选择其中LRU的那个。
  • 一般设置3到7的数字,数值越小样本越不准确,但性能消耗越小。

事务、快照和持久化

redis事务

Redis的事务定义
Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
Redis事务的主要作用就是串联多个命令防止别的命令插队。
主要命令
Multi、Exec、discard
从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。
组队的过程中可以通过discard来放弃组队。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事务的错误处理

  1. 组队中出现错误
    执行时整个的所有队列都会被取消。
    在这里插入图片描述
  2. 执行阶段报错
    如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。
    在这里插入图片描述

乐观锁

这里不阐述乐观锁和悲观锁的概念
redis的乐观锁实现:WATCH key [key ...]
在执行multi之前,先执行watch key1 [key2],可以监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
在这里插入图片描述
上图中开启两个客户端,分别通过watch balance开启乐观锁,在左边的客户端改变了balance的值后,由于balance的值改动,版本不对,因此右边的客户端执行事务时被中断

redis持久化

Redis 提供了2个不同形式的持久化方式。

  1. RDB(Redis DataBase)
  2. AOF(Append Of File)

RDB

在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。
RDB如何备份数据
Redis会单独创建(fork)一个子进程来进行持久化,会先复制上一个持久化好的dump.rdb文件为临时文件,将数据写入到这个临时文件中,待持久化过程都结束了,再用这个临时文件替换原先的dump.rdb。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。
Fork

  • Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)
    数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程
  • 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux中引入了“写时复制技术”
  • 一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。
    RDB持久化流程
    在这里插入图片描述
    RDB配置文件信息
    在这里插入图片描述
    save:如何触发RDB快照的策略
    动态停止RDB:redis-cli config set save "" #save后给空值,表示禁用保存策略

在这里插入图片描述
stop-writes-on-bgsave-error:当Redis无法写入磁盘的话,直接关掉Redis的写操作。推荐yes.

rdbcompression:对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能。推荐yes.

rdbchecksum:在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。推荐yes.

dbfilename: 数据备份文件的名称 默认dump.rdb
在这里插入图片描述
dir : 备份文件生成的路径。默认当前redis.conf所在的目录
优劣势

  • 优势
    适合大规模的数据恢复
    对数据完整性和一致性要求不高更适合使用
    节省磁盘空间
    恢复速度快
  • 劣势
    Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑
    虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。
    在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。

AOF

以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

AOF配置文件信息
在这里插入图片描述
通过 appendonly yes 开启aop持久化模式
appendfilename :aof文件的命名
aof文件生成路径和rdb相同

AOF同步频率设置
在这里插入图片描述
appendfsync always
始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性比较好
appendfsync everysec
每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。
appendfsync no
redis不主动进行同步,把同步时机交给操作系统。

aof重写机制
在这里插入图片描述

  • 简介:
    AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制, 当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩, 只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof

  • 重写原理:
    AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),redis4.0版本后的重写,是指上就是把rdb 的快照,以二级制的形式附在新的aof头部,作为已有的历史数据,替换掉原来的流水账操作。

  • no-appendfsync-on-rewrite:
    如果 no-appendfsync-on-rewrite=yes ,不写入aof文件只写入缓存,用户请求不会阻塞,但是在这段时间如果宕机会丢失这段时间的缓存数据。(降低数据安全性,提高性能)
    如果 no-appendfsync-on-rewrite=no, 还是会把数据往磁盘里刷,但是遇到重写操作,可能会发生阻塞。(数据安全,但是性能降低)

  • 触发机制,何时重写
    Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发
    重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,因此设定Redis要满足一定条件才会进行重写。

  • auto-aof-rewrite-percentage:
    设置重写的基准值,文件达到100%时开始重写(文件是原来重写后文件的2倍时触发)

  • auto-aof-rewrite-min-size:
    设置重写的基准值,最小文件64MB。达到这个值开始重写。
    例如:文件达到70MB开始重写,降到50MB,下次什么时候开始重写?100MB
    系统载入时或者上次重写完毕时,Redis会记录此时AOF大小,设为base_size,
    如果Redis的AOF当前大小>= base_size +base_size*100% (默认)且当前大小>=64mb(默认)的情况下,Redis会对AOF进行重写。

  • 重写流程
    (1)bgrewriteaof触发重写,判断是否当前有bgsave或bgrewriteaof在运行,如果有,则等待该命令结束后再继续执行。
    (2)主进程fork出子进程执行重写操作,保证主进程不会阻塞。
    (3)子进程遍历redis内存中数据到临时文件,客户端的写请求同时写入aof_buf缓冲区和aof_rewrite_buf重写缓冲区保证原AOF文件完整以及新AOF文件生成期间的新的数据修改动作不会丢失。
    (4)1).子进程写完新的AOF文件后,向主进程发信号,父进程更新统计信息。
    2).主进程把aof_rewrite_buf中的数据写入到新的AOF文件。
    (5)使用新的AOF文件覆盖旧的AOF文件,完成AOF重写。

AOF数据恢复
AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。

  • 正常恢复
    将有数据的aof文件复制一份保存到对应目录(查看目录:config get dir)
    恢复:重启redis然后重新加载
  • 异常恢复
    如遇到AOF文件损坏,通过/usr/local/bin/redis-check-aof–fix appendonly.aof进行恢复损坏AOF文件
    重启redis,然后重新加载

优劣势

  • 优势
    备份机制更稳健,丢失数据概率更低。
    可读的日志文本,通过操作AOF稳健,可以处理误操作
  • 劣势
    比起RDB占用更多的磁盘空间。
    恢复备份速度要慢。
    每次读写都同步的话,有一定的性能压力。
    存在个别Bug,造成恢复不能

选择哪种持久化
官方推荐两个都启用。
如果对数据不敏感,可以选单独用RDB。
不建议单独用 AOF,因为可能会出现Bug。
如果只是做纯内存缓存,可以都不用。
官网建议
在这里插入图片描述

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储
  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.
  • Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大
  • 只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
  • 同时开启两种持久化方式
  • 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,
    因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.
  • RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?
  • 建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),
    快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。
  • 性能建议
    • 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。
    • 如果使用AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。
    • 代价,一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。
      只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。
      默认超过原大小100%大小时重写可以改到适当的数值。

其他

集群配置

集群搭建
什么是slots
一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个,
集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:
节点 A 负责处理 0 号至 5460 号插槽。
节点 B 负责处理 5461 号至 10922 号插槽。
节点 C 负责处理 10923 号至 16383 号插槽。

集群中录入值
在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址和端口。
redis-cli客户端提供了 –c 参数实现自动重定向。
如 redis-cli -c –p 6379 登入后,再录入、查询键值对可以自动重定向。
不在一个slot下的键值,是不能使用mget,mset等多键操作。可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去。

springboot 整合redis和redis分布式锁
springboot 整合redis 及springboot 整合redssion 实现分布式锁
springboot 整合redis、redisson

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值