赞
踩
慎用O(n)复杂度命令
慎用Redis的monitor命令
生产环境不能使用 keys指令
禁止使用flushall、flushdb
注意使用del命令
如果是List类型,你可以执行lpop或者rpop,直到所有元素删除完成。
如果是Hash/Set/ZSet类型,你可以先执行hscan/sscan/scan查询,再执行hdel/srem/zrem依次删除每个元素。
避免使用SORT、SINTER等复杂度过高的命令
如果服务对耗时不是特别敏感可以增加重试;如果服务对耗时敏感可以通过异步补偿任务来处理失败的更新,或者短期的数据不一致不会影响业务,那么只要下次更新时可以成功,能保证最终一致性就可以。
数据库中未查询到的数据,可在 Redis 中设置特殊标识,以避免因缓存中无数据而导致每次请求均到达数据库。缓存穿透的解决方案,有以下两种:
对不存在的用户,在缓存中保存一个空对象进行标记,防止相同 ID 再次访问 DB。不过有时这个方法并不能很好解决问题,可能导致缓存中存储大量无用数据。
使用 BloomFilter 过滤器,BloomFilter 的特点是存在性检测,如果 BloomFilter 中不存在,那么数据一定不存在;如果 BloomFilter 中存在,实际数据也有可能会不存在。
当大量缓存集中在某一个时间段失效,这样在失效的时候也会给数据库带来很大压力。对于缓存雪崩的解决方案有以下两种:
搭建高可用的集群,防止单机的 redis 宕机。
设置不同的过期时间,防止同一时间内大量的 key 失效。
某个 key 的缓存过期后,同一时间内有大量的请求均访问该 key,由于缓存过期,大量的请求均会访问数据库,并重建缓存;重建缓存的过程加锁,保证只有一个人执行,其他人等待。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。