Redis 集群缓存清空主要通过命令行工具 redis-cli 执行 flushall 或 flushdb 命令。对于集群环境,需连接各节点或使用特定脚本批量执行。释放存储空间提升性能可配置内存淘汰策略(如 allkeys-lru),结合定期删除与惰性删除机制清理过期键。生产环境操作前务必备份数据,避免误删重要缓存导致服务不可用,同时监控内存使用情况调整配置。
redis
1.首先进到 redis 的安装目录,进到 src 目录下,找到 redis-cli 2.首先用账号密码的方式进入到 redis 的服务端 ./redis-cli -h127.0.0.1-p 6379 -a 1234 进去后会出现下面的界面 ip:port>,你就可以操作啦 flushdb ——> 清空当前数据库中的所有 key flushall ——> 清空整个 Redis 服务器的数据 (删除所有数据库的所有 key ) 到这里就清除完毕,不需要重启,不过大家要注意,你们服务器的缓存数据是否重要,是否可以清除,一定要确定清楚,否则不要轻易清除。
Docker 中 Redis 缓存清理的三种方法详解
进入 redis 容器 bash 复制 docker exec -it < redis_container_name_or_id > /bin/bash 示例:bash 复制 docker exec -it my-redis /bin/bash 连接 redis cli bash 复制 redis-cli 带密码验证:bash 复制 redis-cli -a < password > 执行清理命令 命令类型 说明 适用场景 flushdb 清空当前数据库 单数据库清理 flushall 清空所有数据库 全量数据重置 docker 命令直接执行 无需进入容器,直接执行清理命令:bash 复制 docker exec -it < redis_container_name_or_id > redis-cli flushall 带密码验证版本:bash 复制 docker exec -it < redis_container_name_or_id > redis-cli -a < password > flushall 清理指定数据库 选择目标数据库 (如 1 号库): bash 复制 docker exec -it < redis_container_name_or_id > redis-cli -n 1 执行清理:bash 复制 flushdb 注意事项 数据备份 : flushall 会永久删除所有数据,生产环境需谨慎操作 密码验证 :未配置密码的 redis 可省略
Redis 的数据清理策略详解
怎么做是最优解提供决策依据。Redis 的清理策略,总结概括为三点,被动清理、定时清理、驱逐清理 访问 Key 时,每次都会检查该 Key 是否已过期,如果过期则删除该 Key ,get、scan 等指令都会触发 Key 的过期检查。关键代码如下,expireIfNeeded (redisDb *db, robj *key) 函数会触发检查并删除 robj*lookupKeyReadWithFlags(redisDb*db,robj*key,int flags){robj*val;if(expireIfNeeded(db,key)==1){/* Key expired. If we are in the context of a master, expireIfNeeded() * returns 0 only when the key does not exist at all, so it's safe * to return NULL ASAP. */if(server.masterhost==NULL){server.stat_keyspace_misses++;returnNULL;}if(server.current_client&&server.current_client!=server.master&&server.current_client->cmd&&server.current_client->cmd->flags&CMD_READONLY){server.stat_keyspace_misses++;returnNULL;}}val=lookupKey(db,key,flags);if(val==NULL)server.stat_keyspace_misses++;elseserver.stat_keyspace_hits++;returnval;} 1、Redis 配置项 hz 定义了 serverCron 任务的执行周期,默认为 10,即 CPU 空闲时每秒执行 10 次 2、每次过期 Key 清理的 timelimit 不超过 CPU 时间的 25% ,即若 hz = 1,则一次清理时间最大为 250ms,若 hz = 10,则一次清理时间最大为 25ms,计算逻辑 (timelimit = 1000000*ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC/server.hz/100;) 4、从 db 中随机取 20 个 key,判断是否过期,若过期,则逐出; 5、若有 5 个以上 key 过期,则重复步骤 4,否则遍历下一个 db; 6、在清理过程中,若达到了 timelimit 时间,退出清理过程; 关键代码如下,activeExpireCycle (int type) 会执行上述逻辑 intserverCron(struct aeEventLoop*eventLoop,long long id,void*clientData){databasesCron();}voiddatabasesCron(void){/* Expire keys by random sampling. Not required for slaves * as master will synthesize DELs for us. */if(server.active_expire_enabled){if(server.masterhost==NULL){activeExpireCycle(ACTIVE_EXPIRE_CYCLE_SLOW);}else{expireSlaveKeys();}}}
Redis 的数据过期清除策略 与 内存淘汰策略
一、Redis 的数据过期清除策略:如果我们设置了 Redis 的 key-value 的过期时间,当缓存中的数据过期之后,Redis 就需要将这些数据进行清除,释放占用的内存空间。Redis 中主要使用 定期删除 + 惰性删除 两种数据过期清除策略。1、过期策略:定期删除 + 惰性删除:(1) 定期删除:redis 默认每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果有过期就删除。注意这里是随机抽取的。为什么要随机呢?你想一想假如 redis 存了几十万个 key ,每隔 100ms 就遍历所有的设置过期时间的 key 的话,就会给 CPU 带来很大的负载。为什么不用定时删除策略呢?定时删除,用一个定时器来负责监视 key,过期则自动删除。虽然内存及时释放,但是十分消耗 CPU 资源。在大并发请求下,CPU 要将时间应用在处理请求,而不是删除 key,因此没有采用这一策略。(2) 惰性删除:定期删除可能导致很多过期的 key 到了时间并没有被删除掉。这时就要使用到惰性删除。在你获取某个 key 的时候,redis 会检查一下,这个 key 如果设置了过期时间并且过期了,是的话就删除。2、定期删除 + 惰性删除存在的问题:如果某个 key 过期后,定期删除没删除成功,然后也没再次去请求 key,也就是说惰性删除也没生效。这时,如果大量过期的 key 堆积在内存中,redis 的内存会越来越高,导致 redis 的内存块耗尽。那么就应该采用内存淘汰机制。二、Redis 的缓存淘汰策略:Redis 共提供了 8 中缓存淘汰策略,其中 volatile-lfu 和 allkeys-lfu 是 Redis 4.0 版本新增的。1、noeviction:不进行淘汰数据。一旦缓存被写满,再有写请求进来,Redis 就不再提供服务,而是直接返回错误。Redis 用作缓存时,实际的数据集通常都是大于缓存容量的,总会有新的数据要写入缓存,这个策略本身不淘汰数据,也就不会腾出新的缓存空间,我们不把它用在 Redis 缓存中。2、volatile-ttl:在设置了过期时间的键值对中,移除即将过期的键值对。3、volatile-random:在设置了过期时间的键值对中,随机移除某个键值对。4、volatile-lru:在设置了过期时间的键值对中,移除最近最少使用的键值对。
FAQ
flushall 和 flushdb 有什么区别?
flushdb 清空当前数据库中的所有 key,flushall 清空整个 Redis 服务器的数据,删除所有数据库的所有 key。
清理缓存需要重启服务吗?
不需要重启,命令执行完毕后即清除完毕,但要注意服务器缓存数据是否重要,确定清楚后再操作。
内存满了怎么办?
应采用内存淘汰机制,如 volatile-lru、allkeys-lru 等策略,移除最近最少使用或即将过期的键值对。