一、问题描述
- 目前负责的一个项目用到mysql、redis、clickhouse等数据库。在查询数据时,系统做了缓存,每次优先从缓存取,若redis没有再进入mysql查询,以缓解频繁访问mysql数据库的问题。
- 在开发过程中也会存在一个问题,已修改MySQL、PostgreSQL中数据,但系统内没有变化,接口也为原来数据;更新版本过程中 初始化MySQL、PostgreSQL等数据库后,访问系统仍为原来数据、出现bug……
- 顺着执行流程一步步去追踪查找,结合日志,发现取数据的时候走了redis缓存,数据没有更新;重跑数据的时候,系统里面没有值,也是走了redis缓存。
- 因此要在合适的时候 清空redis缓存数据。
二、解决方案
2.1 在Linux终端或者Xshell端清空redis
启动redis服务后,可输入以下命令清空redis
redis-cli -a password flushall
或者
redis-cli
auth xxx
flushall
2.2 python清空redis
import os
os.system('redis-cli -p %s -a %s flushall' % (redis_port, redis_pass))
三、知识补充
3.1 启动、关闭、查看redis
#启动redis,前面替换为自己的路径
/usr/local/redis/redis-server /usr/local/redis/redis.conf
#关闭redis。也可使用kill -9 Redis_PID(不推荐 可能造成Redis持久化丢失)
redis-cli shutdown
redis-cli -a password shutdown #如果设置了密码 以此命令关闭redis
#查看Redis进程状态
ps -ef | grep redis
3.2 常见redis命令
select 1 //切换数据库。切换到1号库:select 目标库下标。redis默认有16个库,下标从0开始,默认在0号库
dbsize //查看当前数据库大小,也就是key的数量(dbsize)
keys * //查看当前数据库所有的键
flushdb //清空当前数据库
flushall //清空所有数据库
#基本命令
set key value
get key
keys * //获取所有的键;
exists key //判断键是否存在
type key
del key
unlink key //选择非阻塞删除,刚开始没有删除,后续才会删除
move key db //将当前数据库的 key 移动到给定的数据库db当中
rename key newkey //修改 key 的名称;
expire key1 seconds //几秒后删除/过期
ttl key //查看还有多久删除,-2表示已经过期,-1表示永不过期
flushall //清空所有(库的)Redis数据
flushdb //清除当前选择数据库的所有keys