Redis常用命令

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

哨兵

哨兵部署参考

  1. 配置好主从服务器

  2. 修改配置文件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.confimage-3.png

搭建

手工搭建集群

比如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
posted @ 2023-03-11 16:28  kiper  阅读(67)  评论(0编辑  收藏  举报