Redis 笔记

持久化

清除过期key

每100ms扫描一次:

  1. 随机取20个key进行扫描
  2. 检查每个key是否过期,过期的清除
  3. 如果过期的key超过25%, 重复第1步

内存回收

指的是内存空间不够时,主动放弃一些key

Redis事务

MULTI开启事务,EXEC提交事务,DISCARD丢弃

Redis与Memcache的比较

缓存问题

缓存穿透

简介:一般是黑客故意去请求缓存和数据库中不存在的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。

解决办法: 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

常用命令

显示所有key: keys *

//删除当前数据库中的所有Key flushdb //删除所有数据库中的key flushall

删除部分key redis-cli keys "new_ticket*" | xargs redis-cli del

EVAL "for i, name in ipairs(redis.call('KEYS', ARGV[1])) do redis.call('DEL', name); end" 0 "user_account_*"

服务器的redis会丢数据,原因是: WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.

解决办法: To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

删除一个set的所有元素: del aSet

redis的历史命令是保存在客户端的~/.redis_history里面的,所以不用担心服务器

info keyspace 能查看有多少个key

redis 杀掉client

先把最大连接数设置为20000

config set maxclients 20000

再kill掉

sudo netstat -anp |grep 6380| grep '120.76.198.44' | awk '{print $5}' | xargs -I % redis-cli -p 6380 client kill %