redis 2016-04-13 • Lu Tao linux bash命令杂记 redis-cli #以下是一些常用参数示例 # --latency, --latency-history #用于测试客户端与服务器端之间的延迟 redis-cli --raw #可以显示中文 redis-cli -h host -n 1 keys 'effect:*' | wc -l #统计满足条件的key的数量 redis-cli -h <host> -p <port> -n <db> --bigkeys #通过采样才查找当前数据库最大的键 #连接redis,退出时使用命令quit,返回结果是redis数据传输协议的原始数据,没有解析和格式化 telnet host port redis-cli命令杂记 shutdown #安全关机 flushdb #清空当前数据库 dbsize #当前选择数据库的key个数 info commandstats #命令执行情况统计 config resetstat #重置统计信息 info keyspace #key数量 info clients #查看当前连接的客户端数量 client list #客户端信息,具体字段内容参考http://redis.io/commands/client-list # 脚本相关 script flush #清除所有脚本缓存 script exists #根据给定的脚本校验和,检查指定的脚本是否存在于脚本缓存 script load #将一个脚本装入脚本缓存,但并不立即运行它 script kill #杀死当前正在运行的脚本 # 修改配置 config set timeout 3600 #设置客户端连接空闲超过3600秒,则自动断开 # 慢日志相关 slowlog get [num] #获取指定条数的日志 slowlog len #当前长度 slowlog reset #清空 使用redis位图数据格式来统计用户访问次数,相关命令:getbit setbit bitcount 1. 以用户id为key,将每一天用一个小的整数来编码。 从产品上线那天开始,0表示第一天,1表示第二天,以此类推,可用bitcount统计总共登录的天数。 2. 以时间date为key,将用户id(id需为数字)记录下来,这样就能得到每天有多少用户登录过。 如果需要统计一段时间里的登录用户数,可以取这些key的按位逻辑或运算结果,参考bitop命令。 注:当数据量特别大的时候,用bitcount的start和end参数来减少统计量。 3. 也可用字符串来存储,用1 byte来替代1 bit,相关命令:getrange setrange 当用户id不为数字时,以用户id为key,将日期编码为数字进行存储。 根据时间段取出相应range的字符串,统计里面的1出现的个数。 修改配置启动新实例 # 以下列出的配置项都需认真检查核对,并根据自己的情况修改,其它未列出的配置可根据需要自行调整 daemonize yes pidfile /data/tmp/redis_26379.pid port 26379 bind 10.117.199.79 127.0.0.1 # 空闲超时自动关闭 timeout 3600 # 日志文件 logfile /data/log/redis26379.log # rdb持久化 dbfilename redis_dump26379.rdb dir /data/redis # 启用aof持久化 appendonly yes appendfilename "appendonly26379.aof" appendfsync everysec # 慢日志 slowlog-log-slower-than 100000 slowlog-max-len 65536 # 其它的一些不太需要修改的选项 lua-time-limit 5000 #lua脚本的最大执行时间 零碎知识点收集 * 32位的redis最大只能使用4G内存 * 可以使用LPUSH和LTRIM来维持一个固定长度的列表 * redis.replicate_commands(), Replicating commands instead of scripts, from v3.2 实践经验 * 充分利用redis的数据结构减少不必要的key数量。 * 避免使用keys遍历,会对主线程造成长时间阻塞,当无法避免遍历时,可以使用scan来替代。 类似的,可以通过sscan来替代smembers之类的。 * hash结构是个好东西,但是它只支持一级hash,当需要使用多级时,可自行通过序列化实现。 * 注意客户端和服务端之间的网络通信情况--latency/--latency-history。 * redis存取的key或value的最基本类型都是字符串,取回数据后记得要转换为自己需要的类型。 * redis-rdb-tools用于分析内存使用