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