第六届字节跳动青训营第十课:Redis的使用|青训营

47 阅读3分钟

Redis是什么

那么到底什么是redis呢?

  • 从历史方向来看 数据从单表,演进出了分库分表
  • Mysql从单机演进出了集群
  • 数据量增长
  • 读写数据压力的不断增加

面临的问题

随着业务的增加,一个mysql的速度就跟不上了,接着出现了集群

为什么需要redis

数据分冷热 热数据:经常被访问到的数据

将热数据存储到内存中

具体的读和写操作

读操作: 优先在Redis中进行读取,如果读取不到,那么再去mysql中读取 写操作: 先写入mysql集群,然后通过监听binlog修改Redis

redis服务器重启数据丢失问题

我们都知道redis会有一个隐患就是断点或者服务器重启,内存里面的数据就会丢失 其实redis里面有解决的方法: redis用的resp协议 在写命令的同时,写命令会醉驾到AOF文件,到硬盘中,在硬盘中其实还有RDB文件(包含当前这个redis实例的所有文件,所有的key信息),这就保证了redis在重新启动之后,会和上一次的状态会一致的。

重启恢复上次文件的流程

先读取RDB文件,在与AOF进行对比,看有没有没有执行的命令,有区别的话会自动把没有执行的命令进行执行。

Redis应用案例

案例

  1. 连续签到 业务逻辑:连续签到,按照如果每天都签到,签到数每天加一,如果缺席一天,就会自动归0,这里其实用到了redis的过期时间,如果如果假设今天的redis过期时间设置的是后天过期,如果用户进行签到了,那么就会进行延期

redis注意事项

redis之所以快是因为它是一款内存数据库,但是一台机器内存都是有限且比较珍贵的资源,使用redis的时候需要合理的规划对应的内存优化策略。

1、控制key的长度,当key的量级很大的时候,合理的控制key的长度可以节省很大的空间。

2、避免存储bigkey,除了控制key的长度,value的大小也要关注,string的大小控制在10kb以下,list、hash、set、zset也要控制。

3、合理的选择数据类型

String、Set 在存储 int 数据时,会采用整数编码存储。Hash、ZSet 在元素数量比较少时(可配置),会采用压缩列表(ziplist)存储,在存储比较多的数据时,才会转换为哈希表和跳表。

String、Set:尽可能存储 int 类型数据 Hash、ZSet:存储的元素数量控制在转换阈值之下,以压缩列表存储,节约内存 4、把redis尽可能的当成缓存使用

5、实例设置maxmemory+淘汰策略 虽然使用redis的时候会设置key的过期时间,但是如果业务写入量比较大的话,那么短期内redis的内存依旧会快速增加。需要提前预估业务数据量,然后给实例设置maxmemory控制实例的内存上限,然后需要设置内存过期策略。