5redis------------Redis补充--内存淘汰机制与算法、Redis性能测试、Redis慢查询、可视化管理工具------全栈式开发45

  • 仅仅了解即可

一、内存淘汰机制与算法

(一)内存淘汰机制

定义

  • 当 Redis 运行内存已经超过 Redis 设置的最大内存之后,redis将触发内存淘汰机制,采用策略来删除符合条件的键值对,以此来保障 Redis 高效的运行。

Redis 最大运行内存

  • 只有在 Redis 的运行内存达到了某个阀值,才会触发内存淘汰机制,这个阀值就是我们设置的最大运行内存,此值在 Redis 的配置文件中可以找到,配置顶为 maxmemkory。
    # 查看设置的最大运行内存,默认0,表示是没有内存大小限制。
    config get maxmemory 
    # 查看 Redis 内存淘汰策略
    config get maxmemory-policy
    # 内存淘汰策略种类,其中 allkeys-xxx 表示从所有的键值中淘汰数据,而 volatile-xxx 表示从设置了过期键的键值中淘汰数据。
    	noeviction:不淘汰任何数据,当内存不足时,新增操作会报错,Redis 默认内存淘汰策略;
    	allkeys-lru:淘汰整个键值中最久未使用的键值;
    	allkeys-random:随机淘汰任意键值;
    	volatile-lru:淘汰所有设置了过期时间的键值中最久未使用的键值;
    	volatile-random:随机淘汰设置了过期时间的任意键值;
    	volatile-ttl:优先淘汰更早期的键值。
    	在 Redis 4.0 版本中又新增了 2 种淘汰策略:
    	volatile-lfu:淘汰所有设置了过期时间的键值中,最少使用的键值;
    	allkeys-lfu:淘汰整键值中最少使用的键值。
    

在这里插入图片描述

(二)内存淘汰算法

内存淘汰算法种类

  • LRU 算法和 LFU 算法。

LRU 算法

  • LRU 全称是 Least Recently Used 译为最少使用,是一种常用的页面换算法,选择最近最久使用的页面予以淘汰。
    • 1.LRU 算法实现
      • LRU 算法需要基于链表结构,链表中的元素按照操作顺序从前往后排列,最新操作的键会被移动到表头,当需要内存淘汰是、时,只需要删除链表尾部的元素即可。
    • 2.近LRU 算法
      • Redis 使用的是一种近似 LRU 算法,目的是为了更好的节约内存,它的实现方式是给现有的数据结构添加一个额外的字段,用于记录此键值得最后一次访问时间,Redis 内存淘汰时,会使用随机采样的方式来淘汰数据,它是随机取 5 个值(此值可配置),然后淘汰最久没有使用的那个。
    • 3.LRU 算法缺点
      • LRU 算法有一个缺点,比如说很久没有使用的一个键值,如果最近被访问了一次,那么它就不会被淘汰,即使它是使用次数最少的缓存,那它也不会被淘汰,因此在 Redis 4.0 之后引入了 LFU 算法,下面我们一起来看。

LFU 算法

  • LFU 全称是 Least Frequently Used 翻译为最不常用的,最不常用的算法是根据总访问次数来淘汰数据的,它的核心思想是 ‘如果数据过去被访问多次,那么将来被访问的频率也更高’。

二、Redis 性能测试

性能测试工具

  • redis-benchmark 进行测试
  • redis-benchmark 位于 Redis 的 src 目录下

性能测试方法

  • 基准测试: ./redis-benchmark -h
    • 不指定,默认参数
  • 精简测试:./redis-benchmark -t set,get,incr -n 1000000 -q
    • -q 指定输出结果为精简模式
    • -t 表示指定测试指令
    • -n 设置每个指令测试次数
  • 管道测试:./redis-benchmark -t set,get,incr -n 1000000 -q -P 10
    • -p 10 表示每次管道一次执行 10 个 Redis 命令,测试的结果有管道的是普通性能的8陪

性能测试的使用场景

  • 1.技术选型,比如测试 Memcached 和 Redis;
    2.对比单机 Redis 和集群 Redis 的吞吐量;
    3.评估不同类型的存储性能,例如集合和有序集合;
    4.对比开启持久化和关闭持久化得吞吐量;
    5.对比调优和未调优的吞吐量;
    6.对比不同 Redis 版本的吞吐量,作为是否升级的一个参考标准。

管道测试的影响元素

  • 为什么每次执行 10 个 Redis 命令,Pipeline 的效率为什么达不到普通命令的 10 倍呢?这是因为会受到很大外部因素的影响,例如以下几个:
    • 1.网络宽带和网络延迟可能是 Redis 操作最大的性能瓶颈,比如 10w q/s,平均每个请求负责传入 8 KB 的字符,那我们需要的理论宽带是 7.6 Gbits/s,如果服务器配置的是 1Gbits/s,那么一定会有很多信息在排队等候传输,因此运行效率可想而知,这也是很多 Redis 生产环境之所以效率不高的原因;
    • 2.CPU 可能是 Redis 运行的另一个重要的影响因素,如果CPU 的计算机能力跟不上 Redis 要求的话,也会影响 Redis 运行效率;
    • 3.如果 Redis 的运行在虚拟机设备上,性能也会受影响,因为普通操作在虚拟机设备上会有额外的消耗;
    • 4.普通操作和批量操作 (Pipeline)对 Redis 的吐量也有很大的影响。

三、Redis 慢查询

引入

  • Redis 慢查询作用和 MySQL 慢查询作用类时,都是为我们查询出不合理的执行命令,从而让服务器更加高效和健康的运行。对于单线程的 Redis 来说,不合理的使用更是致命的,因此掌握 Redis 慢查询技能对我们来说非常的关键。

开启慢查询

	'''
	配置文件修改
	'''
# 用于设置慢查询的评定时间,也就是说超过配置项的命令,将会被当成慢操作记录在慢查询日志中,它在执行单位是微秒(1秒等于 1000000 微秒)
slowlog-log-slower-than
# 用来配置慢查询日志的最大记录数。
slowlog-max-len
	'''
	linux命令
	'''
#慢日志查询
slowlog get
# 查询指定条数慢查询
slowlog get n
# 获取慢查询队列长度
slowlog len
# 清空慢查询日志
lowlog reset

作用

  • 可以定期检查慢查询日志,及时发现和改进 Redis 运行中不合理的操作。

四、Redis 的可视化管理工具

  • 因为 Redis 官方只提供了命令行版的 Redis 客户端 redis-cli,以至于我们在使用的时候会比较麻烦,通常要输入一堆命令,而且命令行版本的客户端看起来也不够直观。

可视化管理工具

  • RedisClient: Jave 编写的 Redis 连接客户端,功能丰富、免费的。支持平台 Windows。地址:https://github.com/caoxinyu/RedisClient

  • Redis Desktop Manager: 一款基于 Qt5 的跨平台 Redis 桌面管理软件。收费、支持平台Windows、macOS、Linux。地址:https://github.com/uglide/RedisDesktopManager

  • AnotherRedisDesktopManager: 一款基于 Node.js 开发的 Redis、免费桌面管理器,它的特点就是相对来说比较稳定,在数据量比较大的时候不会崩溃。支持平台 Windows、macOS、Linux。地址:https://github.com/qishibo/AnotherRedisDesktopManager

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋芋本人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值