> 文章列表 > 8.redis-BigKey,双写

8.redis-BigKey,双写

8.redis-BigKey,双写

一.BigKey

  1.海量数据里如何查询某一固定前缀的key

scan cursor match key* [COUNT count]

  2.如何限制keys *, flushdb,flushall等危险命令防止误删除

rename-command keys ""
rename-command flushdb ""
rename-command flushall ""

  3.memory usage 命令做什么用

    1) 计算每个key占的字节数

    2) memory usage key1 [samples 5]

  4.Bigkey多大算大?如何发现,如何删除,如何处理

    1) 多大算大:字符串不能超10K, hash,list,set,zset不能超5000条

    2) 如何发现:

redis-cli -a 111111 -h 127.0.0.1 -p 6379 --bigkeys

# 每隔100条休眠0.1秒,防止剧烈抬升

redis-cli -a 111111 -h 127.0.0.1 -p 6379 --bigkeys -l 0.1

memory usage

    3) 如何删除:非字符串的bigkey,不要使用del删除,使用hsacn,sscan,zset渐进删除,同时要注意防止bigkey过期的自动删除,内存不均,集群迁移困难,超时删除,网络阻塞

string: 用del,unlink

hash: hscan + hdel

list: 使用ltrim + del

set: sscan + srem删除

zset: zscan + zremrangebyrank

  5.Bigkey调优,懒性释放lazyfree

lazyfree-lazy-server-del yes

replica-lazy-flush no yes

lazyfree-lazy-user-del yes

  6.Morekey生产上redis数据库有1000w记录,如何遍历

    1) 插入1000万条测试key

for((i=1;i<=100*10000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt; done;

    2) 导入到redis

cat /tmp/redisTest.txt | redis-cli -h 127.0.0.1 -p 6379 -a 111111 --pipe

    3) 查看数量

dbsize

    4) 不用keys,用scan

scan 0 math key1 count 10

二.双写

  1.一致性问题

  2.先动缓存还是数据库

  3.延时双删会有的问题

  4.双检加锁策略,如何避免缓存击穿

  5.如何保证最终一致性