Skip to content

Redis

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属性nameage的值
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的列表右侧加⼊数据01
rpush a1 0 1

2.删除

  • 删除指定元素

  • 将列表中前count次出现的值为value的元素移除

  • count > 0: 从头往尾移除
  • count < 0: 从尾往头移除
  • count = 0: 移除所有
lrem key count value
3:向列表a2中加⼊元素ababab
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.查询

  • 返回列表⾥指定范围内的元素
  • startstop为元素的下标索引
  • 索引从左侧开始,第⼀个元素为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的集合中添加元素lisiwangwuzhaoliuzhangsan,权重分别为4563
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中权限在56之间的元素
zremrangebyscore a4 5 6

3.查询-获取

  • 返回指定返回内的元素
startstop为元素的下标索引
索引从左侧开始,第⼀个元素为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个文件修改 portpidfilecluster-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雪崩”。