• 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用于分析内存使用