java

Redis命令和使用技巧

2019-03-06  本文已影响0人  二妹是只猫

基础命令

server:
client:
# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

默认是使用下标为0的数据库,选择范围是0-15,该命令适用于区分开发环境

redis终端启动

左侧是redis服务端启动成功,右边是redis客户端连接成功。

键命令

keys  *
ttl +键(-1永久的key,-2过期的key)
type+键
rename +原键名+新键名
expire +键 +时间(秒)
del+key
String类型命令:
set  +键  +值
mset +键+值 +键 +值 +键  +值...
mget+键+键+键...
exists + 键
setex+键+时间(秒)+值
get + 键
setnx +键 +值(`与set命令不同,set时键值对存在会重新给值赋值。setnx 如果键值对存在则添加失败,所以该命令只能添加新的键值对`。可配合expire指令用与实现分布式锁)
strlen+键
**incr+键**(`如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作`),**-1是decr**
incrby+键+增加的值(decrby+键+减少的值)
append+键 +值
getset+key+value
hash类型命令:
hset +名称(name)+键名+值
hset +名称(name)+键名+值...
hmget+名称(name)+键+键+键...
hget+名称(name)+键+键+键...
hexists + 键
hgetall+ 键
hkeys+ 键
hvals+ 键
hlen+ 键
hvals+ 键
list类型命令:
lpush  名称+ 元素...(`元素的排列是从后到前开始插入`)
lset+名称+下标+ 元素
lindex+名称+下标
lrange 名称 +起下标+止下标()
lpop+名称
rpop+名称
set类型命令:
sadd+名称+ 元素 + 元素...
scard+名称
smember+名称
sdiff+名称1+名称2
sinter+名称1+名称2
sunsion+名称1+名称2
srandmember + 名称+返回个数
sismember+名称+ 元素
srem+名称+ 元素 + 元素...
spop+名称
sortedset有序集合类型命令
zadd+名称+分数(排序用,int)+元素+分数(排序用,int)+ key +...
zcard+名称
zscore+名称+ 元素
zcount+名称+起值+止值(0  200)
zcount+名称+起值+止值(0  200)+withscores
zrank+名称+ 元素
zincrby+名称+分数+ 元素

从海量key里查询出某一固定前缀都key

留意细节

1.使用keys指令对线上业务的影响
keys pattern:查找所有符合给定模式patten的key

2.使用scan避免keys指令的问题
SCAN cursor[MATCH pattern][COUNT count]


如何通过redis实现分布式锁

分布式锁需要解决的问题

1.使用setnx +键 +值:作用在上方的基础命令中有介绍

2.解决setnx长期有效的问题
expire+key+time

3.redis6.2后可将上述两步合并起来
set+key+value+seconds+milliseconds+nx|xx

大量的key同时过期的注意事项

集中过期,由于清除大量的key很耗时,会出现短暂的卡顿现象


如何使用redis做异步队列

使用list作为队列,rpush生产消息,lpop消费消息

blpop+key+time:阻塞知道队列有消息或者超时
优化:针对上一步的弥补,不用使用弥补中的sleep机制

优化:针对上一步的缺点
pub/sub:主题订阅者模式


pipeline

redis的同步机制

全同步过程

增量同步过程

sentinel
解决主从同步master宕机后的主从切换问题:

redis集群

上一篇 下一篇

猜你喜欢

热点阅读