Redis知识

以下笔记摘自:https://www.w3cschool.cn/redis_all_about/

  • redis-cli –scan –pattern ‘chenqun_*’ 列出符合条件的key
  • 只要有可能的话,就尽量使用散列键而不是字符串键来储存键值对数据,因为散列键管理方便、能够避免键名冲突、并且还能够节约内存。
  • 如果采用序列化考虑通用性,请采用json相关的库进行处理,如果对内存大小和速度都很关注的,推荐使用messagepack进行序列化和反序列化
  • 尽可能使用不要超过1M大小的kv
  • 如果要sort的集合非常大的话排序就会消耗很长时间。由于redis单线程的,所以长时间的排序操作会阻塞其他client的 请求。解决办法是通过主从复制机制将数据复制到多个slave上。然后我们只在slave上做排序操作。把可能的对排序结果缓存。另外就是一个方案是就是采用sorted set对需要按某个顺序访问的集合建立索引。
  • CPU不求核数多,但求主频高,Cache大,因为redis主处理模式是单进程的。同时避免使用虚拟机。
  • RPS就是让网卡使用多核CPU的。传统方法就是网卡多队列(RSS,需要硬件和驱动支持),RPS则是在系统层实现了分发和均衡。如果对redis网络处理能力要求高或者在生产上发现cpu0的,可以在OS层面打开这个内核功能。

设置脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash  
# Enable RPS (Receive Packet Steering)

rfc=32768
cc=$(grep -c processor /proc/cpuinfo)
rsfe=$(echo $cc*$rfc | bc)
sysctl -w net.core.rps_sock_flow_entries=$rsfe
for fileRps in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)
do
echo fff > $fileRps
done

for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
do
echo $rfc > $fileRfc
done

tail /sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}

  • taskset是LINUX提供的一个命令(ubuntu系统可能需要自行安装,schedutils package)。他可以让某个程序运行在某个(或)某些CPU上。

  • 永久设置:config rewrite,将目前服务器的参数配置写入redis conf.

  • -r 选项重复执行一个命令指定的次数。 -i 设置命令执行的间隔。 比如查看redis每秒执行的commands(qps) redis-cli -r 100 -i 1 info stats | grep instantaneous_ops_per_sec 这个选项在编写一些脚本时非常有用

  • -a:如果开启了requirepass,那么你如果希望调用或者自己编写一些外部脚本通过redis-cli进行操作或者监控redis,那么这个选项可以让你不用再手动输入auth。这个选项很普遍,但是往往被人忽视。

  • 对于RDB和AOF,都是直接拷贝文件即可,可以设定crontab进行定时备份: cp /var/lib/redis/dump.rdb /somewhere/safe/dump.$(date +%Y%m%d%H%M).rdb

  • 检查修复AOF文件:redis-check-aof data/appendonly.aof

  • 获取慢查询:SLOWLOG GET 10

  • 查看命令执行了多少次,执行命令所耗费的毫秒数(每个命令的总时间和平均时间) INFO commandstats

  • redis-cli debug oom Redis模拟OOM

  • redis-cli debug segfault 模拟宕机
  • redis-cli -p 6379 DEBUG sleep 30 模拟hang住
  • debug populate 10000 快速产生大量key
-------------本文结束感谢您的阅读-------------