Redis基础使用以及相关注意事项 | 青训营

91 阅读3分钟

Redis是什么

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

为什么需要Redis

数据量增长,读写数据的压力不断增大,直接从数据库中读取消耗时间长。Redis由c语言编写,能将数据写入内存,能加快数据读取。

Redis基本工作原理

  1. 数据从内存中读写
  2. 数据保存到磁盘上防止重启数据丢失
  3. 单线程处理所有操作命令

Redis基本操作

安装

从redis.io下载最新版redis-X.Y.Z.tar.gz 然后 进入相应文件夹 执行以下命令完成安装

tar zxvf redis-2.6.9.tar.gz

cd redis-2.6.9

make
启动

启动redis非常简单,直接./redis-server就可以启动服务端了

基本使用


set key value 设置键和值  

get key 获取值  

del key 删除键

更多基础命令可以去官网查询

注意事项

一、大key,热key

大Key:Value大于10KB就是大Key,使用大Key将导致Redis系统不稳定

消除方法:
  • 拆分: 将大key拆分成多个小key
  • 压缩: 使用相应算法进行压缩,将压缩后的值写入redis,读取时解压后再使用

热Key:一个Key的QPS特别高,将导致Redis实例出现负载突增,负责均衡流量不均的情况。导致单实例故障

解决方法:
  • 设置Localcache: 在本地设置Localcache,将热点数据放入Localcache,以后访问时可以先访问Localcache,未命中再访问redis,降低访问Redis的QPS
  • 拆分: 将key:value这一个热Key复制写入多份,例如key1:value,key2:value,访问的时候访问多个key,但value是同一个,以此将qps分散到不同实例上,降低负载。代价是,更新时需要更新多个key,存在数据短暂不一致的风险
  • 使用Redis代理的热Key承载能力: 字节跳动的Redis访问代理就具备热Key承载能力。本质上是结合了“热Key发现”、“LocalCache”两个功能

二、缓存穿透、缓存雪崩

缓存穿透: 查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致DB 挂掉。

解决方法:
  • 缓存一个空对象: 第一次查询时,如果数据库没有数据,就缓存一个空对象,当下一次访问时,返回一个空对象。
  • 布隆过滤器: 将数据库所有数据使用bloomfilter算法来存储,查询时判断是否在数据库中存在,如果存在才去查询数据库 缓存雪崩: 设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB 瞬时压力过重雪崩。
解决方法:

可以将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。