5种类型操作
string
类型 | 命令 | 作用 |
---|---|---|
string | ||
set key val | 设置键值对 | |
set key val nx ex timeout | 设置键值对,nx代表不存在则设置,ex表示过期时间设置 | |
del key | 删除键值对 | |
get key | 获取值 | |
mset key1 val1 key2 val2... | 批量设置键值对 | |
mget key1 key2 | 批量获取值 | |
incr key | 值自增 | |
decr key | 值自减 | |
incrby key val | 值指定增加 | |
decrby key val | 值指定减少 | |
getset key newval | 获取原来的值并设置新值 | |
strlen key | 获取值长度 | |
append key val | 若键存在,在值后追加字符串;否则创建 | |
getrange key start end | 获取部分值(下标都包含 | |
setnx key val | 键存在便不设置,返回0;键不存在设置值,返回1 | |
expire key seconds | 设置键过期时间 | |
ttl key | 获取过期时间(秒 | |
setex key seconds val | 设置键值对以及过期时间(键若存在便覆盖旧值 |
hash
类型 | 命令 | 作用 |
---|---|---|
hash | ||
hset key field val | 设置键的某字段值 | |
hmset key field1 val field2 val... | 批量设置某键的字段值 | |
hget key field | 获取键的某字段值 | |
hmget key field1 field2 … | 批量获取键的字段值 | |
hgetall key | 获取某键的字段-值对 | |
hlen key | 获取某键的字段数 | |
hdel key field | 删除某键的字段值对 | |
hsetnx key field val | 某键的字段存在便不设置,返回0;键不存在设置值,返回1 | |
hkeys key | 获取某键的全部字段 | |
hvals key | 获取某键的全部字段值 | |
hexists key field | 判断某键的某字段是否存在 | |
hincrby key field val | 某键的某字段指定增加 | |
hincrbyfloat key field val | 某键的某字段指定增加(浮点数 | |
hstrlen key field | 获取某键的某字段长度 | |
expire key seconds | 设置键过期时间 |
list
类型 | 命令 | 作用 |
---|---|---|
list | ||
lpush key val1 val2 … | 从链表左边插入值,若无键则创建 | |
rpush key val1 val2 … | 从链表右边插入值,若无键则创建 | |
lrange key start end | 从链表左边开始查询,end为-1表示最后 | |
lpop key | 从左边弹出值 | |
rpop key | 从右边弹出值 | |
llen key | 获取链表长度 | |
blpop key timeout | lpop阻塞版本 | |
brpop key timeout | rpop阻塞版本 | |
lpushx key val | 从链表左边插入值,若无键则不操作 | |
rpushx key val | 从链表右边插入值,若无键则报错 | |
rpoplpush key1 key2 | 从链表1左边弹出值,从链表2右边插入值 | |
brpoplpush key1 key2 timeout | rpoplpush阻塞版本 | |
lindex key index | 从左边开始查询链表第index的值,负数则倒着查询,-1为最后一个 | |
rem key count val | 从左边开始删除链表的匹配val的值的count个元素,负数则倒着删除 |
set
类型 | 命令 | 作用 |
---|---|---|
set | ||
sadd key val1 val2 … | 给set添加值 | |
smembers key | 查询set所有值 | |
sismember key val | 判断值是否存在set中;存在返回1,否则返回0 | |
srem key val1 val2 | 删除set中的值 | |
scard key | 获取set大小 | |
srandmember key [n] | 随机返回n个数,默认1个 | |
spop key [n] | 弹出n个数,默认1个 | |
sinter key1 key2 | 返回set1和set2的交集 | |
sdiff key1 key2 | 返回set1 - set2的差集 | |
sunion key1 key2 | 返回set1和set2的并集 | |
sinterstore key key1 key2 | 获取set1和set2的交集并存在set中 |
zset
类型 | 命令 | 作用 |
---|---|---|
zset | ||
zadd key score1 val1 score2 val2 | 添加zset值,并给每个值设置分数 | |
zrange key start end | 从zset升序开始查询,end为-1表示最后 | |
zrevrange key start end | 从zset降序开始查询,end为-1表示最后 | |
zrangebyscore key score1 score2 | 查询分数在score1和score2之间的值(score1<score2,返回默认升序 | |
zrevrangebyscore key score1 score2 | 查询分数在score1和score2之间的值(score1>score2,返回默认降序 | |
zrem key val | 删除zset中的值 | |
zcard key | 查询zset大小 | |
zscore key val | 查询zset某值的分数 | |
zrank key val | 查询zset某值按照升序的下标,最小为0 | |
zrevrank key val | 查询zset某值按照降序的下标,最大为0 | |
zincrby key score val | 给zset某值增加指定分数 | |
zcount key score1 score2 | 统计zset在score1和score2之间的值个数 | |
zremrangebyscore key score1 score2 | 删除zset在score1和score2之间的值 | |
zremrangebyrank key start end | 删除zset按照升序排列下标在start和end之间的值 | |
zinterstore destination numkeys key [key…] | 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 | |
zunionstore destination numkeys key [key…] | 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 |
数据库操作
命令 | 作用 |
---|---|
exists key | 判断key是否存在 |
type key | 获取key类型 |
raname old new | 重命名,若old不存在会失败,若new已存在会覆盖 |
renamenx old new | 重命名,若old不存在会失败,若new已存在不操作 |
move key db | 将key移到给定的数据库 |
del key | 删除key |
dbsize | 获取key数量 |
keys [matchstr] | 获取匹配的key |
scan/sscan/hscan/zscan | 增量迭代,每次使用返回游标进行下一次迭代,返回0时迭代结束 |
flushdb | 清空当前数据库的键值对 |
flushall | 清空redis所有数据库的键值对 |
swapdb db1 db2 | 交换2个数据库的键值对 |
事务
命令 | 作用 |
---|---|
multi | 标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。 |
exec | 执行所有事务块内的命令。假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort)。 |
discard | 取消事务,放弃执行事务块内的所有命令。如果正在使用WATCH命令监视某个(或某些)key,那么取消所有监视,等同于执行命令UNWATCH |
watch key1 key2 … | 监视一个(或多个) key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。 |
unwatch key1 key2 … | 取消WATCH命令对所有key的监视。 |
复制
关闭保护模式即可。
redis-cli CONFIG set protected-mode no
redis-cli CONFIG get protected-mode
多实例之间的访问涉及到protected-mode、bind、requirepass
如果protected-mode 为yes,并且bind以及requirepass 没有配置,那么保护模式便会生效,只能本机访问。
bind需要绑定的是本机的ip,同网段的其他实例才能访问进行主从复制或者哨兵监视。)
replicaof ip port 作为ip:port的从服务器,同步其数据
replicaof no one 恢复主服务器角色,并且保留之前的数据
role 查看当前redis实例角色。master、slave、sentinel
哨兵
-
配置好主从服务器
-
修改配置文件sentinel.conf
bind改为0.0.0.0
命令
sentinel monitor <master-name> <ip> <redis-port> <quorum> 监控的主服务器 quorum为判断主节点不可达的票数
sentinel down-after-milliseconds <master-name> <milliseconds> 超时则认为某redis节点不可达
sentinel parallel-syncs <master-name> <numslaves> 限制在一次故障转移之后,每次向主节点发起复制操作的从节点个数
kill掉主服务器后,哨兵会选择另外的从服务器作为新的主服务器,若之前的主服务器进程恢复,哨兵会将其设置为从服务器。
集群
配置
开启cluster配置项 redis:cluster镜像已经完成此操作
sed -i 's/# cluster-enabled yes/cluster-enabled yes/g' /etc/redis/redis.conf
sed -i 's/# cluster-config-file nodes-6379.conf/cluster-config-file nodes-6379.conf/g' /etc/redis/redis.conf
sed -i 's/# cluster-node-timeout 15000/cluster-node-timeout 10000/g' /etc/redis/redis.conf
搭建
手工搭建集群
比如3主6从
cluster meet [ip]:[port]
… 其他8个
在每个master分别执行分配哈希槽
cluster addslots `seq 0 5461`
cluster addslots `seq 5462 10922`
cluster addslots `seq 10923 16383`
分配完后cluster info 集群启动
从服务器上执行
cluster replicate [node-id]
自动搭建集群
redis-cli --cluster create [ip]:[port] … --cluster-replicas n
eg:redis-cli --cluster create 172.17.0.2:6379 172.17.0.3:6379 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379 172.17.0.8:6379 172.17.0.9:6379 172.17.0.10:6379 --cluster-replicas 2
3.重新分片
redis-cli --cluster reshard 127.0.0.1:6379
1.输入要分片的数量
2.输入接收新哈希槽的runid
3.输入失去哈希槽的runid或者all
效率查询
- 查询redis每个操作的具体信息
info commandstats