redis深入学习笔记

redis的安装

  1. 安装包下载
    官网地址https://redis.io/
    右键获取下载地址,如下图:
    在这里插入图片描述
  2. 创建下载目录并下载安装包
cd /usr/local
mkdir redis
cd redis
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
  1. 解压缩
tar -zxvf redis-5.0.8.tar.gz
  1. make
cd redis-5.0.8
make
  1. make install
make install

默认安装到/usr/local/bin
在这里插入图片描述

日志功能

redis.conf文件中的配置

# 日志级别
loglevel notice
# 日志文件路径
logfile /usr/local/bin/redis_6379.log

redis 持久化

RDB

快照物理日志
优点:恢复数据块
缺点:数据可能会丢失

AOF

逻辑日志
优点:丢失数据较少
缺点:恢复数据慢

持久化的监控

 ./redis-cli -a ffcsffcs info|grep rdb
rdb_changes_since_last_save:0    上次RDB保存后,变化的key的个数
rdb_bgsave_in_progress:0         当前是否正在进行bgsave操作   1表示正在进行RDB的快照  0表示没有进行RDB的快照
rdb_last_save_time:1537240803    上次RDB文件的时间戳
rdb_last_bgsave_status:ok        上次RDB执行的状态
rdb_last_bgsave_time_sec:-1      上次执行RDB耗时
rdb_current_bgsave_time_sec:-1    目前保存RDB快照已经花费的时间
 ./redis-cli -a ffcsffcs info|grep aof
mem_aof_buffer:102
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
aof_current_size:921
aof_base_size:870
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0

Redis的内存设置

 ./redis-cli -a ffcsffcs info | grep mem
used_memory:875944
used_memory_human:855.41K
used_memory_rss:4136960
used_memory_rss_human:3.95M
used_memory_peak:875944
used_memory_peak_human:855.41K
used_memory_peak_perc:100.00%
used_memory_overhead:858398
used_memory_startup:791416
used_memory_dataset:17546
used_memory_dataset_perc:20.76%
total_system_memory:1927938048
total_system_memory_human:1.80G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:5.09
mem_fragmentation_bytes:3324176
mem_not_counted_for_evict:102
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:66616
mem_aof_buffer:102
mem_allocator:jemalloc-5.1.0

redis 内存过期策略

  1. 定时删除:通过set命令来指定数据过期的时间,本质是:创建一个定时器
    set命令 + 参数(过期时间)

  2. 定期删除:主动删除
    每隔一段时间执行一次删除任务
    参数:hz

  3. 惰性删除:被动删除,get key的时候做删除

redis 慢查询日志

  1. 什么是慢查询?慢查询日志
    慢查询是慢操作,影响系统性能
    慢查询日志帮助运维人员定位系统中的慢操作
    是系统在命令发出执行后,计算每条命令的执行时间,如果这个执行时间超过了设置的阈值,就会被记录到慢查询日志中

  2. Redis的慢查询相关参数设置
    slowlog-log-slower-than 10000 命令执行的时间阈值,单位毫秒
    等于0 记录所有的操作
    小于0 不会记录任何操作(禁用了慢查询日志)

     slowlog-max-len 128     设置慢查询日志中最多存储的慢查询日志条数
    
  3. 举例
    日志的组成格式:4部分
    (1)ID号
    (2)时间戳
    (3)命令耗时
    (4)命令和参数
    命令:slowlog get [N]
    修改时间阈值
    config set slowlog-log-slower-than 10
    命令: keys k*
    在这里插入图片描述

redis的管道(pipeline)

批处理。

  1. 非管道处理时的用时(59661)
	@ApiOperation("批量插入1000数据到redis的操作时间示例")
	@GetMapping("/demo1")
	public String demo1() {
		long begin = System.currentTimeMillis() ;
		redisTemplate.execute(new RedisCallback<Object>() {
			@Override
			public Object doInRedis(RedisConnection connection) throws DataAccessException {
				for(int i = 0 ; i<1000; i++) {
					connection.set(("set"+i).getBytes(),String.valueOf(i).getBytes()) ;
					System.out.println("set"+i);
				}
				return null;
			}
			
		}) ;
		long end = System.currentTimeMillis() ;
		System.out.println("批量插入1000数据到redis的操作时间:"+(end - begin));
		return String.valueOf( end - begin );
	}

在这里插入图片描述
2. 管道处理时的用时(172)

	@ApiOperation("管道方式插入1000数据到redis的操作时间示例")
	@GetMapping("/demo2")
	public String demo2() {
		long begin = System.currentTimeMillis() ;
		
		redisTemplate.executePipelined(new RedisCallback<Object>() {

			@Override
			public Object doInRedis(RedisConnection connection) throws DataAccessException {
				for(int i = 0 ; i<1000; i++) {
					connection.set(("pipeline"+i).getBytes(),String.valueOf(i).getBytes()) ;
					System.out.println("pipeline"+i);
				}
				return null;
			}
			
		}) ;
		long end = System.currentTimeMillis() ;
		System.out.println("管道方式插入1000数据到redis的操作时间:"+(end - begin));
		return String.valueOf( end - begin );
	}

在这里插入图片描述

Redis HyperLogLog

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。只需要12K内存就能统计2^64个数据。
实现原理具体可参考
https://www.cnblogs.com/linguanh/p/10460421.html

命令

  1. PFADD key element [element …]
    添加指定元素到 HyperLogLog 中。
  2. PFCOUNT key [key …]
    返回给定 HyperLogLog 的基数估算值。
  3. PFMERGE destkey sourcekey [sourcekey …]
    将多个 HyperLogLog 合并为一个 HyperLogLog

示例

在这里插入图片描述

Redis 发布订阅

命令

  1. SUBSCRIBE channel [channel …]
    订阅给定的一个或多个频道的信息。
  2. PUBLISH channel message
    将信息发送到指定的频道

示例

在这里插入图片描述
在这里插入图片描述

Redis 事务

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

命令

  1. MULTI
    标记一个事务块的开始
  2. EXEC
    执行所有事务块内的命令

示例

  1. 示例1
    在这里插入图片描述

  2. 示例2,中间插入失败不影响前后的操作,说明不是原子性
    在这里插入图片描述

redis cluster 配置_方式1

  1. 创建集群的相关文件目录
    其中7000到7005 为每个节点的目录,将端口作为目录
    redis-cli和redis-server是从redis安装好后的bin目录下复制过来
    在这里插入图片描述

  2. 为7000到7005的目录下添加redis.config的配置文件
    在这里插入图片描述

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes

port 按照各自的端口修改

  1. 分别启动6个节点
    在这里插入图片描述
../redis-server redis.conf 
  1. 查看启动后的6个节点的进程
ps -ef|grep redis

在这里插入图片描述
5. 创建集群环境

该版本不需要依赖ruby的脚本来创建,直接可以使用如下命令

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

在这里插入图片描述
输入 yes
在这里插入图片描述

  1. 测试集群
  2. 连接集群命令 -c 表示以集群方式连接
./redis-cli -c -p 7000

在这里插入图片描述

  1. 添加key
set a av

在这里插入图片描述
注意此处会自动根据hash计算key应该存储到哪个slot中,并切换到该slot所在的主节点,如图会从7000端口切换到7002端口。
在这里插入图片描述

redis cluster 配置_方式2

使用redis提供的工具来生成集群环境

  1. 该工具位于redis安全文件中的utils目录下

在这里插入图片描述
2. 将该工具拷贝到集群目录下
在这里插入图片描述

  1. 修改该文件的配置信息,将redis-cli redis-server 的路径修改正确,下图展示出其中两处
    在这里插入图片描述

4.使用该工具生成6个redis节点

./create-cluster start

在这里插入图片描述

  1. 使用该工具创建集群环境
 ./create-cluster create

在这里插入图片描述
在这里插入图片描述

  1. 完成创建 后面验证与方式1一致
    在这里插入图片描述

  2. 停止所有节点

./create-cluster stop

在这里插入图片描述

  1. 解散并清除集群
    清除所有的集群配置
./create-cluster clean

在这里插入图片描述

redis 集群管理

  1. cluster info
    在这里插入图片描述

  2. cluster nodes
    在这里插入图片描述

  3. cluster slots
    在这里插入图片描述

  4. cluster slaves {masterid}
    在这里插入图片描述

  5. cluster getkeysinslot 15495 10
    查看对应槽【15495 】的【10】个key
    在这里插入图片描述

reids cluster 添加节点

  1. 按照上面配置集群的方式新配置两个7006和7007端口的redis节点服务
    在这里插入图片描述

  2. 启动7006和7007节点
    在这里插入图片描述

  3. 添加master节点7006

 ./redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000

在这里插入图片描述

  1. 查看添加的7006master
./redis-cli --cluster check 127.0.0.1:7000

在这里插入图片描述
可以看到新增的master还没有分配槽

  1. 分配槽slot到新的master
 ./redis-cli --cluster  reshard 127.0.0.1:7000

在这里插入图片描述

  1. 查看分配后的槽信息
 ./redis-cli --cluster check 127.0.0.1:7000

在这里插入图片描述

  1. 添加slave节点7007到master7006
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7000 --cluster-slave --cluster-master-id 64e80e2d2f1765f73d79d6ea4b3b15ee4a96ec4c

在这里插入图片描述
在这里插入图片描述

redis cluster删除节点

  1. 删除主节点
./redis-cli --cluster del-node 127.0.0.1:7006 64e80e2d2f1765f73d79d6ea4b3b15ee4a96ec4c

直接删除会报错,因为该主节点分配了槽,所以需要先取消槽
在这里插入图片描述

  1. 先取消主节点上的槽
./redis-cli --cluster reshard 127.0.0.1:7006

在这里插入图片描述

  1. 取消后的节点槽信息

在这里插入图片描述

  1. 再删除主节点
./redis-cli --cluster del-node 127.0.0.1:7006 64e80e2d2f1765f73d79d6ea4b3b15ee4a96ec4c

在这里插入图片描述

  1. 删除从节点7007
./redis-cli --cluster del-node 127.0.0.1:7007 1662dc6dc2552abab17ba234170714833263305a

在这里插入图片描述

  1. 查看节点信息

在这里插入图片描述

  1. 查看redis进程发现7006 7007的进程也不存在了
ps -ef|grep redis

在这里插入图片描述

redis 监控工具及命令

吞吐量

  1. 查看相关参数信息
./redis-cli -p 6379 -a ffcsffcs info | grep -e "connected_clients" -e "blocked_clients" -e "used_memory_human" -e "used_memory_peak_human" -e "rejected_connections" -e "evicted_keys" -e "instantaneous"
  1. 各参数意义
    在这里插入图片描述
connected_clients:1                 已经连接的客户端的个数
blocked_clients:0                   被阻塞的客户端个数
used_memory_human:2.10M
used_memory_peak_human:2.18M
instantaneous_ops_per_sec:0         每秒执行的指令个数
instantaneous_input_kbps:0.00       每秒输入的数据量
instantaneous_output_kbps:0.00      每秒输出的数据量
rejected_connections:0              拒绝的链接个数
evicted_keys:0                      运行以来删除的key的个数
  1. 有命令在执行时的参数数据示例
    在这里插入图片描述

延迟

  1. 客户端引起的
    模拟:
    服务端监控命令
 ./redis-cli -p 6379 -a ffcsffcs --latency

在这里插入图片描述
客户端延迟debug 睡眠 5秒

debug sleep 5

在这里插入图片描述
2. 服务端引起的
(1)默认,禁用了服务器内部延迟的检查机制
(2)参数:latency-monitor-threshold
config set latency-monitor-threshold 100
(3)示例
手动制造一些延迟
debug sleep 2
debug sleep .15
debug sleep .5
(4)查看 latency

latency latest

在这里插入图片描述

latency history command

在这里插入图片描述

latency graph command

在这里插入图片描述
3. 指导和建议:
命令 doctor

latency doctor

在这里插入图片描述

延迟度量

baseline(基线)

# 100 表述侦测时长100秒
 ./redis-cli -p 6379 -a ffcsffcs --intrinsic-latency 100

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值