Redis开发与运维
常用命令
redis-server启动redis
redis-server /opt/redis/redis.conf 配置启动
redis-server --port 6379 --dir /usr/local/data(存放持久化文件和日志文件的目录) 按照参数启动其他配置默认
redis-cli命令行客户端
redis-cli -v 查看redis的版本信息
redis-cli -h {host} -p {port} 交互式方式连接
redis-cli -h {host} -p {port} {command} 命令方式连接
redis-cli shutdown optional{nosave|save} 停止redis服务 是否生成持久化文件
命令:发送命令(网络时间) 执行命令(redis命令时间) 返回结果(网络时间)
keys * 所有键 遍历所有键 大量键下禁止使用
dbsize 键总数 直接获取内置的键总数变量
exists key 键是否存在
del key... 删除键
expire key seconds 键过期
ttl key 键的剩余过期时间 -1没设置过过期时间 -2键不存在
type key 键的数据类型 不存在->none
object encoding key 查看内部编码类型
String
set key value [ex second] [px millisecond] [nx(键必须不存在)|xx(必须存在)]
setex key seconds value
setnx key value
get key
mset k1 v1 k2 v2
mget k1 k2 k3
Hash
hset key field value
hsetnx key field value
hget key field
hdel key field ...
hlen key
hmget key f1 f2
hmset key f1 v1 f2 v2
hexists key field
hkeys key 获取所有的field
hvals key 获取所有的值
hgetall key 获取所有的field和值
List(索引下标有序,时间轴,消息队列)
rpush|lpush key v1 v2
lrange key start end
linsert key before|after pivot value 在pivot前后插入value
lindex key index
llen key
lpop|rpop key 左|右侧弹出元素(删除)
lrem key count value 删除指定元素 count >0从左向右删除最多count个value元素 =0删除所有
ltrim key start end 相当于substring的用法
lset key index newValue
blpop|brpop key1 key2 ... timeout 阻塞命令
Set(标签,社交)
sadd key element1 element2 ...
srem key e1 e2 ...
scard key 计算元素个数
sismember key v 判断元素是否在集合中
srandmember key count 随机从集合中返回指定个数元素
spop key 随机弹出一个元素(删除)
smembers key 获取所有元素
sinter k1 k2 多个集合的交集
suinon k1 k2 多个集合的并集
sdiff k1 k2 多个集合的差集
sinterstore destination k1 k2 将k1 k2交集保存到destination中
sunionstore destination k1 k2
sdiffstore destination k1 k2
SortSet(分值有序,排行榜,社交)
zdd key score member [score member ...]
zcard key
zscore key member
zrank key member 计算成员到排名位置
zrevrank key member
zrem key m1 m2 ..
zincrby key value member 给member的score增加value分
zrange key start end [withscores] 从高到低返回
zrevrange key start end
zrangebyscore key min max [withscores] [limit offset count] 从指定范围返回
zcount key min max
zremrangebyrank key start end 删除指定排名内到升序元素
zremrangebyscore key min max
zinterstore destination numkeys key .... [weights weight...] [aggregate sum|min|max]
destination:交集计算结果保存到这个键
numkeys:需要做交集计算键到个数
weights:每个键到权重,在做交集计算时,每个键中到每个member 会将自己到分数乘以这个权重值
aggregate:计算成员交集后,分值按照sum|min|max做汇总,默认sum
zunionstore destination numkeys key ... [weights weight ...] [aggreate sum|min|max]
慢查询
config set sowlog-log-lower-than 20000 超过20秒记录
config set slowlog-max-len 1000 日志队列记录最长1000
config rewrite 配置持久化到本地配置文件
slowlog get [n] 获取n条日志记录
slowlog len 日志队列长度
slowlog reset 清空慢查询日志
事务
watch 事务期间监控某个值不变才能正确提交
multi 开始
exec 提交
LUA脚本
redis-benchmark redis基准测试工具
redis-benchmark -c 100 -n 20000 -t get,set -q --csv 100个客户端同时向redis发送get,set请求,共执行20000次。-q只输出每秒响应请求数据量并导出到csv
持久化RDB(紧凑压缩的二进制文件)
手动触发 :1.save(阻塞当前redis服务器) 2.bgsave(执行fork操作创建子进程)
自动触发:1.使用save m n配置 2.执行全量复制 3.执行debug reload 4.执行shutdown
持久化AOF(append only file)以独立日志的方式记录每次写命令
append, sync, rewrite, load
命令写入-> append-> AOF缓存-> sync-> AOP文件rewrite<- 重启load
redis-check-aof --fix 修复损坏的aof文件 diff -u 比较文件不同
redis-check-dump 持久化文件检测和修复工具
redis-sentinel 启动redis-sentinel
配置文件中的 sentinel monitor mymaster 127.0.0.1 6379 2 代表sentinel节点需要监控mymaster这个主节点,2代表判断主节点失败至少需要2个sentinel节点同意
redis-sentinel /opt/redis/redis-sentinel-26379.conf