redis缓存数据库

redis服务

NoSql(not only sql)主要分为:

  • 临时性键值存储 memcache、redis
  • 永久性键值存储 roma、redis
  • 面向文档的数据库 MongoDB、couchdb、elasticksearch、redisjson
  • 面向列的数据库 cassandra、hbase

redis特性:

  • 速度快: 10w qps,基于内存,C语言实现,单线程
  • 持久化
  • 支持多种数据结构
  • 支持多种编程语言
  • 支持lua脚本,发布订阅、事务、pipeline等
  • 代码精简,单线程开发容易,不依赖外部库
  • 主从复制
  • 支持高可用、分布式

单线程工作模式:

  • 6.0版本以前是单线程,之后支持多线程
  • 纯内存存储
  • 非阻塞型io
  • 避免线程切换的竞争资源消耗

注意: 性能优化事项

  • 一次执行一条命令
  • 拒绝长(慢)命令: keys、flushall、show lua script、mutil/exec、operate gib value(collection)
  • 其他线程:fysnc file descriptor、cloes file descriptor

redis对比memcached:

  • 支持数据的持久化: 可以将内存中的数据保持在磁盘中,重启redis服务或者服务器之后可以从备份文件中恢复数据到内存继续使用
  • 支持更多的数据类型: 支持string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zet(有序集合)
  • 支持数据的备份: 可以实现类似于数据的master-slave模式的数据备份,另外也支持使用 快照+AOF
  • 支持更大的value数据: memcache单个ke:value最大只支持1MB,而redis最大支持512MB
  • Redis是单线程,而memcache是多线程,所以单机情况下没有memcache并发高,但redis支持分布式集群以实现更高的并发,单Redis实例可以实现数万并发
  • 支持集群横向扩展: 基于redis cluster的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性。
  • 都是基于C语言开发

redis 典型应用场景及其流程:

  • Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
  • 缓存:数据查询、电商网站商品信息、新闻内容
  • 计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
  • 微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等
  • 消息队列:ELK的日志缓存、部分业务的订阅发布系统
  • 地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能

数据更新操作流程:
image
数据读操作流程:
image

做消息队列:
image

redis程序

  • redis-server:用于启动Redis的工具。
  • redis-benchmark:用于检测Redis在本机的运行效率。
  • redis-check-aof:修复AOF持久化文件
  • redis-check-rdb:修复RDB持久化文件
  • redis-cli: Redis 命令行工具
  • redis-setinel: redis- -server文件的软链接

redis-server命令:

redis-server -h 	
	./redis-server [/path/to/redis.conf] [options]
	./redis-server - (read config from stdin)		
	./redis-server (run the server with default conf)
	./redis-server /etc/redis/6379.conf
	./redis-server --port 7777
	./redis-server --port 7777 --replicaof 127.0.0.1 8888
	./redis-server /etc/myredis.conf --loglevel verbose
	./redis-server /etc/sentinel.conf --sentinel

redis-benchmark命令:

redis- -benchmark [option] [option value]. 常用选项如下所示。
	-h	指定服务器主机名。
	-p	指定服务器端口。
	-s	指定服务器socket。
	-c	指定并发连接数。
	-n	指定请求数。
	-d	以字节(B) 的形式指定SET/GET值的数据大小。
	-k	1=keep alive 0=reconnect。
	-r	 SET/GET/INCR 使用随机key, SADD使用随机值。
	-P	通过管道传输 请求。
	-q	强制退出redis. 仅显示query/sec值。
	--csv	以CSV格式输出。
	-I	生成循环,永久执行测试。
	-t	 仅运行以逗号分隔的测试命令列表。
	-Idle模式	仅打开N个idle连接并等待。

例:

#发送100个并发连接与100000个请求测试性能
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000

#测试存取大小为100B的数据包的性能
redis-benchmark -h 1127.0.0.1 -p 6379 -q -d 100 

#测试本机上Redis服务在进行set与lpush操作时的性能
redis-benchmark -t set, lpush -n 00000 -q

redis-check-aof命令

用于修复aof文件错误,aof文件错误时,redis是不能正常启动的

redis-check-aof --fix AOF文件

redis-check-rdb命令

用于修复rdb文件错误,rdb文件错误时,redis是不能正常启动的

redis-check-aof --fix RDB文件

redis-cli命令:

redis-cli [选项] [命令]
选项:
	-h 主机		连接主机
	-p 6379		端口
	-s socket文件	socket连接
	-a 密码
	-c 		集群模式中自动重定向槽位
	get 键		直接查看变量
	info		直接查看info信息
	config
	shutdown
	--cluster 命令	集群相关命令

命令:
	info [信息段]	查看数据库信息
		信息段:
		  Server	为服务端配置
		  Clients	为客户端信息
		  Memory	为内存相关信息
		  Persistence	持续保持
		  Stats		数据库状态
		  Replication	主从复制
		  CPU
		  Cluster	集群相关
		  Keyspace	数据库存的总数据量,也就是键值对
	set key value [expiration EX 秒|PX 毫秒] [NX|XX]		存入数据,建 值即可,后面可省略
		说明:
		  EX为键值对有效期时间,秒为单位
		  PX为键值对有效期时间,毫秒为单位
		  NX为键不存在时,才进行操作
		  XX为键已经存在时,才进行操作
	get key 		查看数据,键
	del key 		删除键
	config get/set 键/参数 值 	临时动态查看/修改数据或配置参数
	config get s*		支持迷糊查询键
	config set requirepass 123456	临时修改密码
	save 			保存
	slowlog len		慢查询记录数量
	slowlog get		慢查询记录查看
	slowlog reset		清空慢查询日志
	dbsize			数据总数
	flushall 		删除所有库所有key
	flushdb			强制清空当前库的所有key
	select num		选择几号数据库,相当于mysql的use database
		注意: 集群中不支持多个库,只能使用0库
	keys *			用通配符列出库中所有key,但会引起cpu高负荷,大数据时引起宕机,禁用
	shutdown		保存所有数据后关闭服务
	ttl key 		查看数据的有效期
		说明:
		  -1为永久有效
		  -2为过期
	type key 		查看key的数据属性
	cluster 命令		执行集群相关的命令
		集群命令:
		  info
		  cluster_size		集群数(有槽位才算集群)
		  nodes			显示当前节点与其他节点关系
		  meet ip port		认识集群其他节点
		  addslots 槽位		手动加槽位(只能一个一个加)
		  create		创建集群
		  check
		  fix			集群数据迁移时的错误修复
		  reshard		重新分配槽位
		  repbalance		自动平均集群槽位
		  add-node		添加新节点
		  del-node		删除节点
		  call
		  set-timeout
		  import		导入数据到集群

info命令输出信息:

server: 一般 Redis 服务器信息,包含以下域
redis_version Redis 服务器版本
redis_git_sha1 Git SHA1
redis_git_dirty Git dirty flag
os Redis 服务器的宿主操作系统
arch_bits 架构(32 或 64 位)
multiplexing_api Redis所使用的事件处理机制,默认epoll
gcc_version 编译 Redis 时所使用的 GCC 版本
process_id 服务器进程的 PID
run_id Redis服务器的随机标识符(用于Sentinel和集群)
tcp_port TCP/IP 监听端口
uptime_in_seconds 自Redis服务器启动以来,经过的秒数
uptime_in_days 自Redis服务器启动以来,经过的天数
hz redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次
configured_hz
lru_clock 自增的时钟,用于LRU管理,该时钟100ms(hz=10,因此每1000ms/10=100ms执行一次定时任务)更新一次
executable 执行文件,服务程序在哪
config_file 配置文件路径
clients: 已连接客户端信息,包含以下域
connected_clients 已连接客户端的数量(不包括通过从属服务器连接的客户端)
client_longest_output_list 当前连接的客户端当中,最长的输出列表
client_longest_input_buf 当前连接的客户端当中,最大输入缓存
blocked_clients 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
memory: 内存信息,包含以下域
used_memory 由Redis分配器分配的内存总量,不包含内存碎片,也就是实际使用的内存,以字节(byte)为单位。
used_memory_human 以人类可读的格式返回Redis分配的内存总量
used_memory_rss 从操作系统的角度,返回Redis已分配的内存总量(俗称常驻集大小)。这个值和top、ps等命令的输出一致。包含内存碎片,整个进程的内存,包含了上面的实际内存;如果rss过大导致内部碎片大,内存资源浪费,和fork的耗时和cow内存都会增大
used_memory_rss_human
used_memory_peak Redis的内存消耗峰值(以字节为单位)
used_memory_peak_human 以人类可读的格式返回Redis的内存消耗峰值
used_memory_peak_perc (used_memory/used_memory_peak)*100%,内存使用峰值占用总内存的百分比
used_memory_overhead Redis为了维护数据集的内部机制所需的内存开销,包括所有客户端输出缓冲区、查询缓冲区、AOF重写缓冲区和主从复制的backlog
used_memory_startup Redis服务器启动时消耗的内存
used_memory_dataset used_memory - used_memory_overhead
used_memory_dataset_perc 100%*(used_memory_dataset/(used_memory—used_memory_startup)),当前数据集占用启动后内存的百分比
allocator_allocated 分配器分配的内存
allocator_active 分配器活跃的内存
allocator_resident 分配器常驻的内存
total_system_memory 整个系统内存
total_system_memory_human
used_memory_lua Lua引擎所使用的内存大小(以字节为单位)
used_memory_lua_human
mem_fragmentation_ratio used_memory_rss和used_memory之间的比率,used_memory_rss/ used_memory
maxmemory Redis实例的最大内存配置
maxmemory_human
maxmemory_policy 当达到maxmemory时的淘汰策略
allocator_frag_ratio 分配器的碎片率
allocator_frag_bytes 分配器的碎片大小(以字节为单位)
allocator_rss_ratio 分配器常驻内存比例
allocator_rss_bytes 分配器的常驻内存大小(以字节为单位)
rss_overhead_ratio 常驻内存开销比例
rss_overhead_bytes 常驻内存开销大小(以字节为单位)
mem_fragmentation_ratio 内存碎片率,used_memory_rss和used_memory之间的比率
mem_fragmentation_bytes 内存碎片的大小(以字节为单位)
mem_not_counted_for_evict 被驱逐的大小
mem_replication_backlog repl_backlog
mem_clients_slaves clients_slaves
mem_clients_normal clients_normal
mem_aof_buffer aof的写缓冲大小
mem_allocator 在编译时指定的,Redis所使用的内存分配器。可以是libc 、jemalloc或者tcmalloc

注意:

  • 在理想情况下,used_memory_rss的值应该只比 used_memory稍微高一点儿。当rss>used,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。内存碎片的比率可以通过mem_fragmentation_ratio 的值看出当 used > rss 时,表示Redis的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟
  • 当Redis释放内存时,分配器可能会,也可能不会,将内存返还给操作系统
  • 如果Redis释放了内存,却没有将内存返还给操作系统,那么used_memory的值可能和操作系统显示的 Redis 内存占用并不一致
  • 查看used_memory_peak的值可以验证这种情况是否发生
  • active_defrag_running 表示有没有活动的defrag任务正在运行,1表示有活动的defrag任务正在运行(defrag:表示内存碎片整理)
  • lazyfree_pending_objects 等待释放的对象数(由于使用ASYNC选项调用UNLINK或FLUSHDB和FLUSHALL)

注意2:

  • 内存碎片过大时可进行碎片整理,当mem_fragmentation_ratio<1时用swap多,mem_fragmentation_ratio>1.5时碎片较多
  • 手动整理:redis-cli memory purge

手动整理内存碎片,但会阻塞主进程,且是粗暴的清理脏页来达到回收内存

  • 自动整理: redis-cli CONFIG SET activedefrag yes

自动内存整理,进行数据整合(复制、转移),也会阻塞主进程

persistence: RDB 和 AOF 的相关信息
loading 服务器是否正在载入持久化文件
rdb_changes_since_last_save 离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
rdb_bgsave_in_progress 0为没有RDB备份,1为正在
rdb_last_save_time 离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件
rdb_last_bgsave_status 最近一次rdb持久化是否成功
rdb_last_bgsave_time_sec 最近一次成功生成rdb文件耗时秒数
rdb_current_bgsave_time_sec 如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数
rdb_last_cow_size RDB过程中父进程与子进程相比执行了多少修改(包括读缓冲区,写缓冲区,数据修改等)
aof_enabled 是否开启了aof
aof_rewrite_in_progress 标识aof的rewrite操作是否在进行中
aof_rewrite_scheduled rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite
aof_last_rewrite_time_sec 最近一次aof rewrite耗费的时长
aof_current_rewrite_time_sec 如果rewrite操作正在进行,则记录所使用的时间,单位秒
aof_last_bgrewrite_status 上次bgrewriteaof操作的状态
aof_last_write_status 上次aof写入状态
aof_last_cow_size AOF过程中父进程与子进程相比执行了多少修改(包括读缓冲区,写缓冲区,数据修改等)
stats: 一般统计信息
total_connections_received 接收到的总连接数,可以写脚本看新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置
total_commands_processed redis处理的命令数
instantaneous_ops_per_sec redis当前的qps,redis内部较实时的每秒执行的命令数
total_net_input_bytes redis网络总入口流量字节数
total_net_output_bytes redis网络总出口流量字节数
instantaneous_input_kbps redis网络入口当前kps
instantaneous_output_kbps redis网络出口当前kps
rejected_connections 拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数
sync_full 主从完全同步成功次数
sync_partial_ok 主从部分同步成功次数
sync_partial_err 主从部分同步失败次数
expired_keys 运行以来过期的key的数量
expired_stale_perc 过期的比率
expired_time_cap_reached_count 过期计数
evicted_keys 运行以来清除(超过了maxmemory后)的key的数量
keyspace_hits 命中次数
keyspace_misses 未命中次数
pubsub_channels 当前消息队列使用中的频道数量
pubsub_patterns 当前消息队列使用的模式的数量
latest_fork_usec 最近一次fork操作阻塞redis进程的耗时数,单位微秒
migrate_cached_sockets 是否已经缓存了到该地址的连接
slave_expires_tracked_keys 从实例到期key数量
active_defrag_hits 主动碎片整理命中次数
active_defrag_misses 主动碎片整理未命中次数
active_defrag_key_hits 主动碎片整理key命中次数
active_defrag_key_misses 主动碎片整理key未命中次数
master_host MasterIP
master_port
master_link_status Master的连接状态(up/down)
master_last_io_seconds_ago 最近一次主从交互之后的秒数
master_sync_in_progress 表示从服务器是否一直在与主服务器进行同步
slave_repl_offset 从服务器复制偏移量
slave_priority 从服务器的优先级
slave_read_only 从服务是否只读
replication: 主/从复制信息
role 实例的角色,是master or slave
connected_slaves 连接的slave实例个数
master_replid 主实例启动随机字符串
master_replid2 主实例启动随机字符串2
master_repl_offset 主从同步偏移量,此值如果和上面的slave_repl_offset相同说明主从一致没延迟,与master_replid可被用来标识主实例复制流中的位置
second_repl_offset 主从同步偏移量2,此值如果和上面的offset相同说明主从一致没延迟
repl_backlog_active 复制积压缓冲区是否开启
repl_backlog_size 主从复制时的缓冲区大小(repl_back_buffer),单位字节
repl_backlog_first_byte_offset 复制缓冲区里偏移量的大小
repl_backlog_histlen 此值等于master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小
cpu: CPU 计算量统计信息
used_cpu_sys 将所有redis主进程在核心态所占用的CPU时求和累计起来
used_cpu_user 将所有redis主进程在用户态所占用的CPU时求和累计起来
used_cpu_sys_children 将后台进程在核心态所占用的CPU时求和累计起来
used_cpu_user_children 将后台进程在用户态所占用的CPU时求和累计起来
cluster: Redis 集群信息

开启集群后才会显示

cluster_enabled 实例是否启用集群模式
keyspace: 数据库相关的统计信息

使用了几个库,就显示几个库,默认有16个库

db0 db0的key的数量,以及带有生存期的key的数,平均存活时间

配置文件解读: redis.conf

bind 127.0.0.1			监听地址,空格隔开监听多个
protected-mode yes		3.2版本以后,没有bind和密码,允许本地访问,不允许远程访问
port 6379			监听端口
tcp-backlog 511			三次握手的时候server端收到client ack确认号之后的队列值,避免最大并发的时候出现拒绝访问,采取队列排队连接
timeout 0			连接超时时间,默认0,永不超时
tcp-keepalive 300		tcp会话保持时间
daemonize no			守护进程方式运行,默认为no,关闭
supervised no			和操作系统相关参数,可以设置通过upstart和systemd管理Redis守护进程,centos 7以后都使用systemd
pidfile /var/run/redis_6379.pid		pid文件路径
loglevel notice				日志级别
logfile /var/log/redis/redis.log	日志文件路径
databases 16			设置db库的数量,默认16个,一般用第一个
always-show-logo yes		启动服务时,是有显示log
save 900 1			900秒内有1个键数据发生更改就自动RDB备份
save 300 10			300秒变10次就触发
save 60 10000
stop-writes-on-bgsave-error yes		快照出错时是否禁止redis写入操作,如果磁盘空间满了,会引起redis不可访问,生产环境可改为no,尽最大可能保证redis是可访问的
rdbcompression yes		持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
rdbchecksum yes			是否开启RC64校验,默认是开启
dbfilename dump.rdb		rdb快照文件名
dir /var/lib/redis		rdb快照文件保存路径
replica-serve-stale-data yes	当从库同步主库时失去连接或者复制正在进行被断开,从机库有两种运行方式:
	1、设置为yes(默认设置),从库会继续响应客户端的读请求。
	2、设置为no,除去指定的命令之外的任何请求都会返回一个错误"SYNC with	master in progress"
	
replica-read-only yes		是否设置从库只读
repl-diskless-sync no		是否使用socket方式复制数据(无盘同步),新slave连接时候需要做数据的全量同步,redis-server就要从内存dump出新的RDB文件,然后从master传到slave,有两种方式把RDB文件传输给客户端:
	1、基于硬盘(disk-backed):master创建一个新进程dump RDB,RDB完成之后由父进程(即主进程)传给slaves
	2、基于socket(diskless):master创建一个新进程直接dump RDB到slave的socket,不经过主进程,不经过硬盘
	基于硬盘的话,RDB文件创建后,一旦创建完毕,可以同时服务更多的slave,但是基于socket的话,新slave连接、到master之后得逐个同步数据
	在磁盘较慢并且网络较快的时候,可以用diskless(yes),否则使用磁盘(no)

repl-diskless-sync-delay 5	复制的延迟时间,0为关闭,在延迟时间内连接的新客户端,会一起通过disk方式同步数据,但是一旦复制开始还没有结束之前,master节点不会再接收新slave的复制请求,直到下一次同步开始
repl-ping-slave-period 10 	slave根据master指定的时间进行周期性的PING监测
repl-timeout 60 		复制连接的超时时间,需要大于repl-ping-slave-period,否则会经常报超时
repl-disable-tcp-nodelay no	在socket模式下是否在slave套接字发送sync之后禁用TCP_NODELAY
repl-backlog-size 512mb 	主从复制缓冲区内存大小,只有在slave连接之后才分配内存
repl-backlog-ttl 3600 		多次时间master没有slave连接,就清空backlog缓冲区
replica-priority 100		当master不可用,Sentinel会根据slave的优先级选举一个master,最低的优先级的slave,当选master,而配置成0,永远不会被选举
requirepass foobared 		设置连接密码
rename-command 				重命名一些高危命令
	rename-command keys "linux"	keys命令改名为linux
	rename-command flushall ""	禁用flushall命令
	
maxclients 10000 		Redis最大连接客户端
maxmemory 		最大内存,单位为bytes字节,8G内存的计算方式8(G)=8*1024M*1024K*1024b,或者8589934592字节,4592到K,9934到M,8589到G,需要注意的是slave的输出缓冲区是不计算在maxmemory内
appendonly no		是否开启AOF日志记录,默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了,但是redis如果中途宕机,会导致可能有几分钟的数据丢失(取决于dumpd数据的间隔时间),根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件
appendfilename "appendonly.aof"		AOF文件名
appendfsync everysec		aof策略配置,no为关闭,由操作系统来负责数据同步到磁盘(一般30s一次)
	always为每次写入都执行fsync,保证数据同步到磁盘
	everysec为每秒执行一次fsync,可能会导致丢失这1s数据	
no-appendfsync-on-rewrite no		在rewrite期间,是否把新记录的追加到buffer区,主要考虑磁盘IO和请求阻塞时间
	默认为no,表示"不暂缓",新的aof记录仍然会被立即同步,Linux的默认fsync策略是30秒,也就是新数据写入buffer,写入旧aof和临时aof都进行
	如果为yes可能丢失30秒数据,但由于yes性能较好而且会避免出现阻塞因此比较推荐,也就是新数据直接写入临时aof文件,全部写入临时aof
	
auto-aof-rewrite-percentage 100		当Aof日志增长超过指定百分比例时重写AOF(文件有64m时触发,按100%增长,128m时再次触发,重写后可能是100m,再次100%增长到200m时,再次触发重写...),设置为0表示不自动重写Aof日志,重写是为了使aof体积保持最小,但是还可以确保保存最完整的数据
auto-aof-rewrite-min-size 64mb		触发aof rewrite的最小文件大小
aof-load-truncated yes		是否加载由于其他原因导致的末尾异常的AOF文件(主进程被kill/断电等)	
aof-use-rdb-preamble no		4.0新增RDB-AOF混合持久化格式,aof文件数据记录格式
	在开启之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)	
	新版本redis 5.0.3以后,默认开启了,aof文件变小,但导致不能编辑此文件,因为是二进制数据,所以如果需要能够手动修改次文件,次配置在新版本中要关闭
lua-time-limit 5000		lua脚本的最大执行时间,单位为毫秒
cluster-enabled yes 		是否开启集群模式,默认是单机模式
cluster-config-file nodes-6379.conf 	由node节点自动生成的集群配置文件
cluster-node-timeout 15000 		集群中node节点连接超时时间
cluster-replica-validity-factor 10 	在执行故障转移的时候可能有些节点和master断开一段时间数据比较旧,这些节点就不适用于选举为master,超过这个时间的就不会被进行故障转移
cluster-migration-barrier 1 		集群迁移屏障,一个主节点拥有的至少正常工作的从节点,即如果主节点的slave节点故障后会将多余的从节点分配到当前主节点成为其新的从节点。
cluster-require-full-coverage no 	集群请求槽位全部覆盖,如果一个主库宕机且没有备库就会出现集群槽位不全,那么yes情况下redis集群槽位验证不全就不再对外提供服务,而no则可以继续使用但是会出现查询数据查不到的情况(因为有数据丢失)
slowlog-log-slower-than 10000		以微秒为单位的慢日志记录,为负数会禁用慢日志,为0会记录每个命令操作
slowlog-max-len 128			滚动记录内存中的慢查询记录数量,128条

#redis高级设置
activedefrag yes			#内存碎片整理总开关,开启后才有可能执行碎片整理
active-defrag-ignore-bytes 100mb	#内存碎片的字节数达到此阀值(默认100MB)时,允许整理
active-defrag-threshold-lower 10	#内存碎片空间占操作系统分配给 Redis 的总空间比例达到此阀值(默认10%)时,允许整理
active-defrag-threshold-upper 100	#内存碎片空间占操作系统分配给Redis的总空间比例达到此阀值(默认100%)时,则尽最大努力整理
active-defrag-cycle-min 5		#清理内存碎片占用 CPU 时间的比例不低于此阀值(默认5%),保证清理能正常开展
active-defrag-cycle-max 75		#清理内存碎片占用CPU 时间的比例不高于此阀值(默认75%),一旦超过则停止清理
active-defrag-max-scan-fields 1000	#碎片整理扫描set/hash/zset/list时,仅当set/hash/zset/list的长度小于此阀值时,才会将此key加入碎片整理

redis慢查询:

原理:

  • 客户端向redis发起请求,到达服务端后进入等待执行队列,先进先出,一个一个执行,执行命令的时间是redis慢查询的关注点

image

posted @ 2022-02-15 19:30  suyanhj  阅读(513)  评论(0)    收藏  举报