个人做的微网站一年要交多少钱,美食网站建设服务策划书,网站建设需要哪些软件,8上的信息课做网站作业不知从何开始Redis的内存淘汰策略也开始被人问及#xff0c;卷#xff01;真的是太卷了。难不成要我们去阅读Redis源码吗#xff0c;其实问题的答案#xff0c;在Redis中的配置文件中全有#xff0c;不需要你阅读源码、这个东西就是个老八股#xff0c;估计问这个东西是想…不知从何开始Redis的内存淘汰策略也开始被人问及卷真的是太卷了。难不成要我们去阅读Redis源码吗其实问题的答案在Redis中的配置文件中全有不需要你阅读源码、这个东西就是个老八股估计问这个东西是想考察你们做的项目体量大不大。一般用 lru 就行。
内存回收策略
找到redis安装目录找到redis.conf文件找到如下代码即可配置对应的内存回收策略
maxmemory-policy noeviction至于内存策略有哪几种文档中也写出来了但是用洋文写的下面用国语翻译一下。 当Redis使用内存超过了配置文件中设置的最大内存、或者大于物理机内存将会触发内存回收策略
volatile-lru - remove the key with an expire set using an LRU algorithm借助 lru 算法移除最近最少使用的过期 key推荐allkeys-lru - remove any key according to the LRU algorithm移除最近最少使用的key无论该 key 是否过期不推荐volatile-random - remove a random key with an expire set从过期 key 中随机移除 key也可以用用但是效果没有第2种的好allkeys-random - remove a random key, any key随机移除 key无论 key 是否过期volatile-ttl - remove the key with the nearest expire time (minor TTL) 删除快过期的 key不推荐noeviction - don’t expire at all, just return an error on write operations这个是Redis默认的内存回收策略没内存后写入会报错建议改成 volatile-lru
过期删除策略
这玩意我在配置文件中翻了一圈没找到对应的配置那就肯定是要看redis源码了。我很爱看源码。但是看了下redis安装文件中的src文件这玩意尼玛好像是用C语言写的就好像很多人喜欢问 Synchronized 锁升级但是这玩意的源码需要进行反编译查看而且不是用 Java写的叫我们怎么看呢。但是没关系这些我都总结好了。 Redis用到的过期删除策略惰性删除、定期删除、定时删除这些都是前辈们的经验之谈这玩意怎么来的就好比Mybatis中用到了哪些设计模式委派模式是其中的一个同理 惰性删除、定期删除、定时删除也是Redis用到的一部分过期删除策略。要想完全搞明白用到的所有过期删除策略你需要把 src 文件下面所有的 .c 文件全部看一遍。
惰性删除访问某个key的时候先检测key是否过期过期了直接删除返回null没过期返回具体值。至于源码文件在 src 目录下面有个 db.c 文件里面有个 expireIfNeeded 函数就 是 Redis 每次对 key 进行操作前都会调用 expireIfNeeded 函数判断key是否过期过期了就删除key、没过期就不删 定期删除每隔一定时间取出部分key筛出其中的过期key然后删除。具体源码自行翻阅 src目录中的 .c 文件定时删除这个也很好理解过期key到了过期时间自动删除。具体源码自行翻阅 src目录中的 .c 文件
RDB文件路径配置
修改 redis.conf 中的如下配置即可
# RDB文件名称
dbfilename dump.rdb
# RDB文件存放路径
dir /Users/zhangzixing/Desktop/redis持久化文件主动生成RDB文件命令
没怎么用过这些命令浅浅的记录一下 阻塞Redis所有请求直至RDB文件生成完成不建议使用
SAVE开启子线程非阻塞生成RDB文件
BGSAVE本机启动Redis
这个读者可以跳过我经常忘记我电脑上Redis的安装路径这里做个记录
redis-server /usr/local/redis-6.0.10/etc/redis.conf
config set requirepass 123456Redis 单线程个人理解
由于 Redis 的内存数据库CPU不会成为Redis性能的瓶颈内存执行指令速度非常快是单个线程去执行指令但是别忘了Redis 还需要对 RDB、AOF 文件进行 IO 操作IO 操作是多线程执行的。 到此本文结束关注不迷路后续分享更多经验之谈