Redis:大厂程序员是怎么用的 | 青训营

60 阅读4分钟

什么是Redis?

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间 (geospatial) 索引半径查询。 Redis 内置了复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化 (persistence)-- RDB和AOF , 并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。

image.png

为什么需要Redis?

就数据的存储而言,服务器的数据存储设计大概经历了一下几个过程:

1、单机MySQL时代

image.png 这种模式下的瓶颈:

  • 数据量太大,一个机器存放不下
  • 数据的索引太大,一个机器的内存放不下
  • 访问量(读写混合)太大,一个服务器承受不住
2、缓存 Memcached+读写分离

网站上80%的情况都是在读,每次都去查询数据库,效率很低。这时候可以加入缓存机制,第一次查 询去MySQL中读取数据,将数据返回给用户的同时,在缓存中也存储下来。第二次访问,就可以直接从 缓存中读取。

image.png

3、分库分表 + 水平拆分(MySQL集群)

image.png 但是随着社会的发展,要存储数据的类型(音乐,视频,地理位置,人际交往圈、用户自己产生的数 据,用户日志等)也越来越繁多,数据量也爆发式增长。这样MySQL等关系型数据库就越来越不够用 了!NoSQL数据库就开始进入人们的视野!NoSQL数据库可以很好的解决这些问题。

4、什么是NoSQL

NoSQL(Not Only SQL)泛指非关系型数据库。 NoSQL的特点

  • 方便扩展(数据之间没有关系)
  • 大数据量高性能(Redis写8w/s, 读11w/s,NoSQL的缓存记录级是一种细粒度的,性能会更高)
  • 数据类型是多样型的! 不需要事先设计数据库,随取随用
  • 存储方式多样, 键值对,列存储,文档存储,图形数据库
  • 没有固定的查询语言

Redis基本工作原理

Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务 器中的数据库状态也会消失。所以Redis提供了持久化的功能。

1、RDB (Redis DataBase)

image.png 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文 件直接读到内存中。

Redis会单独创建(fork)一个子进程来进程持久化,会先将数据写入到一个临时文件中,待持久化 过程都结束了,再用这个临时文件替换上一次持久化好的文件。整个过程中,主进程是不进行任何IO操 作的,这就确保了极高的性能。如果需要进程大规模数据的恢复,且对数据恢复的完整性不是非常敏 感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。 rdb保存的文件是dump.rdb

触发机制
  1. save的规则满足的情况下,会自动触发rdb操作
  2. 执行flushall命令,会触发rdb操作
  3. 对出redis时,也会触发rdb操作

备份会自动生成也给dump.rdb文件

如何恢复rdb文件

只需要将rdb文件放在redis的启动目录下就可以。redis启动时会自动检查dump.rdb文件恢复其中的数据。

127.0.0.1:6379> config get dir 
1) "dir" 
2) "/usr/local/bin"  //如果这个目录下存在dump.rdb文件,启动就会根据这个文件恢复数据
优点
  1. 适合大规模的数据恢复
  2. 对数据的完整性要求不高
缺点
  1. 需要一定的时间间隔进行操作,如果redis意外宕机,最后一次持久化后的操作数据就没有了
  2. fork进程的时候,会需要占用一定的内存空间
2、AOF(Append Only File)

将所有写操作的命令都记录下来,类似history,恢复时将所有的命令都执行一遍!

AOF保存的文件是appendonly.aof

如果这个aof文件被恶意修改,这个时候redis是启动不起来的,我们需要修复这个aof文件!

redis提供的一个工具 redis-check-aof --fix 来修改aof文件。

优点
  1. 每一次修改都同步,文件的完整性比较好
  2. 每秒同步一次,可能会丢失1s的数据
缺点
  1. 相对于数据文件来说,aof远远大于rdb
  2. 修复的速度比rdb慢
  3. AOF的运行效率也比rdb慢

Redis的五个基本类型

  • 字符串 string
  • 列表 list
  • 集合 set
  • 哈希 hash
  • 有序集合 zset