Redis¶
一.字符串string¶
- 1.增
- set
- mset
- 2.删 del
- 3.改 set
- 4.查
- get
- mget
- 5.追加 append
- 6.有效期 setex key seconds value
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
1.增加¶
- 设置键值
set key value
e.g. set name rossum
- 设置键的过期时间
setex key seconds value
# 设置name 值为rossum 为3秒的数据
setex name 3 rossum
- 设置多个键值
mset key1 value1 key2 value2 ...
mset name jason age 18
2.删除¶
del key
127.0.0.1:6379> get name
"wang"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
# 查询一个空值 返回 nil
flushdb # 删除当前数据库中的所有Key
flushall # 删除所有数据库中的key
3.修改¶
set key newvalue
127.0.0.1:6379> get name
"sun"
127.0.0.1:6379> set name wang
OK
127.0.0.1:6379> get name
"wang"
4.查询¶
- 获取:根据键获取值,如果不存在此键则发那会(nul)
get key
get name
- 根据多个键取多个值
mget key1 key2
5.追加值¶
append key value
e.g. append name honey
127.0.0.1:6379> set name1 wang
OK
127.0.0.1:6379> get name1
"wang"
127.0.0.1:6379> APPEND name1 wangyang
(integer) 12
127.0.0.1:6379> get name1
"wangwangyang"
二.键命令¶
- 1.查 keys *
- 2.删 del key
- 3.是否存在 exists key
- 4.键的类型 type
- 5.设置key的过期时间 expire key seconds
- 6.查看key的过期时间 ttl key
1.查找键,参数支持正则表达式¶
keys pattern
keys * 查看所有键
keys a* 查看名称中包含a的键
2.删除键及对应的值¶
del key1 key2
3.判断键是否存在,如果存在返回1,不存在返回0¶
exists key1
4.查看键对应的value的类型¶
type key
5.设置过期时间,以秒为单位¶
expire key seconds
6.查看有效时间,以秒为单位¶
ttl key
三.哈希hash¶
- 1.增 hset hmset
- 2.删 hdel 对象的属性的 Del将整个对象删除
- 3.改 hset hmset
- 4.查 hget hmget
- 5.获取对象的所有属性 hkeys
- 6.获取对象的所有值 hvals
-
7.获取对象的所有属性和值 hgetall
-
hash⽤于存储对象,对象的结构为属性、值:对象:属性--值 person name "张三"
- 值**的类型为**string
1.增加¶
- 设置单个属性
hset key field value
hset user name it # 设置键 user的属性name为it
- 设置多个属性
hmset key field1 value1 field2 value2 ...
hmset u2 name it age 11 设置键u2的属性name为it、属性age为11
2.删除¶
- 删除整个hash键及值,使⽤del命令
- 删除属性,属性对应的值会被⼀起删除
hdel key field1 field2 ...
hdel u2 age 删除键u2的属性age
3.修改¶
hset key newvalue
4.获取¶
- 获取⼀个属性的值
hget key field
hget u2 name 获取键u2属性name的值
- 获取多个属性的值
hmget key field1 field2 ...
- 获取键
u2
属性name
、age
的值
hmget u2 name age
- 获取所有属性的值
hvals key
- 获取键
u2
所有属性的值
hvals u2
- 获取指定键所有的属性
hkeys key
- 获取键u2的所有属性
hkeys u2
- 获取对象的所有属性和值
hgetall key
四.列表list¶
- 1.增 lpush rpush
- 2.删 lrem key count value: count 0 全删, -负数倒着删, 正数从头删除
- 3.改 lset key index value
- 4.查 lrange start stopindex
- 5.插入 linsert key before/after oldvalue newvalue
-
6.截取 ltrim key start stop
-
列表的元素类型为string
- 按照插⼊顺序排序
1.增加¶
- 在左侧插入数据
lpush key value1 value2...
例1:从键为a1的列表左侧加⼊数据a 、 b 、c
lpush a1 a b c
- 在右侧插入数据
rpush key value1 value2
例2:从键为a1的列表右侧加⼊数据0、1
rpush a1 0 1
2.删除¶
-
删除指定元素
-
将列表中前
count
次出现的值为value
的元素移除 - count > 0: 从头往尾移除
- count < 0: 从尾往头移除
- count = 0: 移除所有
lrem key count value
例3:向列表a2中加⼊元素a、b、a、b、a、b
lpush a2 a b a b a b
例4:从a2列表右侧开始删除2个b
lrem a2 -2 b
例5:查看列表a2的所有元素
lrange a2 0 -1
3.修改设置指定索引位置的元素值¶
- 索引从左侧开始,第⼀个元素为0
- 索引可以是负数,表示尾部开始计数,如
-1
表示最后⼀个元素
lset key index value
例6:修改键为a1的列表中下标为1的元素值为z
lset a 1 z
4.查询¶
- 返回列表⾥指定范围内的元素
start
、stop
为元素的下标索引- 索引从左侧开始,第⼀个元素为0
- 索引可以是负数,表示从尾部开始计数,如
-1
表示最后⼀个元素
lrange key start stop
例7:获取键为a1的列表所有元素
lrange a1 0 -1
5. 插入--在指定元素的前或后插⼊新元素¶
linsert key before或after 现有元素 新元素
例8:在键为a1的列表中元素b前加⼊3
linsert a1 before b 3
6.截取修剪¶
- 修剪(截取) 在[start stop]区间内的元素,区间外的元素全部删除
ltrim key start stop
五.集合set¶
- ⽆序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 说明:对于集合没有修改操作
- 1.增 sadd
- 2.删 srem
- 3.查 smembers
1.增加¶
- 添加元素
sadd ksy member1 member2 ...
例1:向键a3的集合中添加元素zhangsan、lisi、wangwu
sadd a3 zhangsan sili wangwu
2.删除¶
- 删除指定元素
srem key
例2:删除键a3的集合中元素wangwu
srem a3 wangwu
3.获取¶
- 返回所有的元素
smembers key
例2:获取键a3的集合中所有元素
smembers a3
六.有序集合zset¶
- sorted set,有序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
- 说明:没有修改操作
- 1.增 zadd key score value score value score value
- 2.删 zrem key value
- 3.根据权重范围删除 zremrangebyscore key min max
- 4.查 zrange key 0 -1
- 5.根据权重查询 zrangebyscore key min max
- 6.获取权重 zscore key value
1.增加¶
- 添加
zadd key score1 member1 score2 member2 ...
例1:向键a4的集合中添加元素lisi、wangwu、zhaoliu、zhangsan,权重分别为4、5、6、3
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
2.删除¶
- 删除指定元素
zrem key member1 member2 ...
例5:删除集合a4中元素zhangsan
zrem a4 zhangsan
- 删除权重在指定范围的元素
zremrangebyscore key min max
例6:删除集合a4中权限在5、6之间的元素
zremrangebyscore a4 5 6
3.查询-获取¶
- 返回指定返回内的元素
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
zrange key start stop
例2:获取键a4的集合中所有元素
zrange a4 0 -1
- 返回score值在min和max之间的成员
zrangebyscore key min max
例3:获取键a4的集合中权限值在5和6之间的成员
zrangebyscore a4 5 6
- 返回成员member和score值
zscore key member
例4:获取键a4的集合中元素zhangsan的权重
zscore a4 zhangsan
七.Redis主从搭建¶
# ubuntu 20.04 Redis server v=5.0.7
1.cp /etc/redis
2.sudo cp redis.conf slave.conf
3.sudo vim redis.conf
# bind 127.0.0.1 ::1
bind ip地址
4.sudo vim slave.conf
bind ip地址
slaveof ip地址 6379
port 6378 # 修改端口号
5.cp /etc/redis
sudo redis-server redis.conf
sudo redis-server slave.conf
6.redis-cli -h ip地址 info Replication
# Replication
role:master
connected_slaves:1
slave0:ip=ip地址,port=6378,state=online,offset=112,lag=0
master_replid:1998d70bf016068e4cba05aff7e7036f219cfeb7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:112
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:112
7.校验主写从读
redis-cli -h ip地址 -p 6379
set name SalvatoreSanfilippo
redis-cli -h ip地址 -p 6378
get name
八.Redis集群搭建¶
# ubuntu 20.04 Redis server v=5.0.7
1.
cd /Desktop
mkdir conf
cd conf
touch {7001..7006}.conf
2. sudo vim 7001.conf
port 7001
bind ip地址
daemonize yes
pidfile 7001.pid
cluster-enabled yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes
3.
其他5个文件修改 port、pidfile、cluster-config-file三项均修改为文件的名字相同
4.
redis-server 7001.conf
redis-server 7002.conf
redis-server 7003.conf
redis-server 7004.conf
redis-server 7005.conf
redis-server 7006.conf
5. # ps aux | grep redis
redis-server ip地址:7001 [cluster]
redis-server ip地址:7002 [cluster]
redis-server ip地址:7003 [cluster]
redis-server ip地址:7004 [cluster]
redis-server ip地址:7005 [cluster]
redis-server ip地址:7006 [cluster]
6. # 创建集群
redis-cli --cluster create ip地址:7001 ip地址:7002 ip地址:7003 ip地址:7004 ip地址:7005 ip地址:7006 --cluster-replicas 1
[OK] All 16384 slots covered.
7. 数据验证
redis-cli -h ip地址 -c -p 7001
set name SalvatoreSanfilippo
九.哨兵¶
事务¶
发布订阅¶
stream¶
击穿¶
在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。
缓存预热¶
缓存更新
缓存失效策略
雪崩¶
Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。