redis

Redis基本概念

最基本

Redis(Remote Dictionary Server远程数据服务),内存高速缓存数据库。

  • 有客户端和服务端,一般说的是服务端
  • 基于内存
  • 非关系型数据库
  • 支持主从同步
  • 持久化
  • 高并发读写
  • 单进程单线程模型

应用场景

  • 数据缓存,当访问数据库接口比较慢时,将数据通过Redis进行缓存,这样下次获取数据就不需要再次进行SQL操作,而是直接从缓存中读取。(高频读,低频写)
  • 队列:push和pop
  • 数据存储:依赖硬盘的持久化机制

Redis数据类型

对key的操作

1
2
3
4
exists key # 测试指定key是否存在
type key # 返回给定的value的类型
del key # 删除key
persist key # 设置永不过期

数据类型

String

可以存储任何数据,包括存储字符串、整数或者浮点数,jpg图片(二进制)或者序列化的对象(都称为元素)

1
2
3
4
5
6
7
set key value # 设置key对应的值为string类型的value
get key # 获取值
incr key #对key的值做加加操作,并返回新的值
decr key #对key的值做渐减操作,并返回新的值
incrby key integer #同incr,加指定的值
decrby key integer #同decr,减指定的值
append key value #追加内容

List

列表,可用于队列,先进先出,有push和pop操作

1
2
3
4
5
6
lpush key value # 在key对应list的头部添加字符串元素
rpush key value # 尾部
rpop key # 在list的尾部删除元素,并返回删除元素
llen key # 获取元素个数
lrange key start stop # 获取列表元素
lrange key 0 -1 # 取出所有元素

Set

无顺序集合,集合中的元素没有顺序,并且是唯一的,可取并集、交集、差集

1
2
3
4
5
6
7
8
9
sadd key member #添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中,返回0,key对应的set不存在返回错误
srem key member [memeber] #从key对应set中移除给定元素,成功返回1
smove p1 p2 member #从p1 对应set中移除member并添加到p2对应set中
scard key #返回set的元素个数
sismember key member #判断member是否在set中
sinter key1 key2...keyn #返回所有给定key的交集
sunion key1 key2...keyn #返回所有给定key的并集
sdiff key1 key2...keyn #返回所有给定key的差集
smembers key #返回key对应set的所有元素,结果是无序的

Sort Set (ZSet)

score-value的有序集合,其中score为浮点,value为元素,可以调整元素的顺序

1
2
3
4
5
zrange key start stop # 获取排名范围的元素
zrange key 0 -1 # 获取所有元素
zcard key # 获取集合元素个数
zscore key member # 获取元素分数
zrank key member # 获取元素排名

Hash

有key-value的散列组,其中key是字符串,value是元素

1
2
3
4
5
6
hset key field value #插入/修改
hget key field #获取
hlen key # 查看hash长度
hgetall key # 获取所有键与值
hkeys key # 获取所有字段
hvals key # 获取所有值

Redis常见问题

1. 击穿

在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。

原因

  • 第一次访问
  • 恶意访问不存在的key
  • Key过期

规避方案

  • 服务器启动时, 提前写入
  • 规范key的命名, 通过中间件拦截
  • 对某些高频访问的Key,设置合理的TTL或永不过期

2. 雪崩

Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。

规避方案

  • 使用Redis集群
  • 限流