redis 工作原理 (上)
1 什么是 redis
redis 是 nosql(也是个巨大的 map) 单线程,但是可处理 1 秒 10w 的并发(数据都在内存中)
使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql,有各类实现他的实现类,我们常用的是 druid
其中对 redis,我们通常用 Jedis(也为我们提供了连接池 JedisPool)
在 redis 中,key 就是 byte[](string)
redis 的数据结构(value):
String,list,set,orderset,hash
2 redis 的使用
先安装好 redis,然后运行,在 pom 文件中引入依赖,在要使用 redis 缓存的类的 mapper.xml 文件配置 redis 的全限定名。引入 redis 的 redis.properties 文件(如果要更改配置就可以使用)
应用场景:
String :
1 存储 json 类型对象,2 计数器,3 优酷视频点赞等
list(双向链表)
1 可以使用 redis 的 list 模拟队列,堆,栈
2 朋友圈点赞(一条朋友圈内容语句,若干点赞语句)
规定:朋友圈内容的格式:
1,内容: user:x:post:x content 来存储;
2,点赞: post:x:good list 来存储;(把相应头像取出来显示)
hash(hashmap)
1 保存对象
2 分组
3 string 与 hash 的数据差别
在网路传输时候,必须要进行进行序列化,才可以进行网路传输,那么在使用 string 类型的类型的时候需要进行相关序列化,hash 也是要进行相关的系列化,所以会存在很多序列化,在存储的时候 hash 是可以存储的更加丰富,但是在反序列化的时候,string 的反序列化相对较低,而 hash 的序列化和返序列化是相对 hash 类更加复杂,所以看业务场景,如果是数据经常修改的那种,为了性能可以使用 string,如果是数据不是经常改的那种就可以使用 hash,由于 hash,存储数据时比较丰富,可以存储多种数据类型
4 redis 的持久化方式:
能,将内存中的数据异步写入硬盘中,两种方式:RDB(默认)和 AOF
RDB 持久化原理:通过 bgsave 命令触发,然后父进程执行 fork 操作创建子进程,子进程创建 RDB 文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换(定时一次性将所有数据进行快照生成一份副本存储在硬盘中)
优点:是一个紧凑压缩的二进制文件,Redis 加载 RDB 恢复数据远远快于 AOF 的方式。
缺点:由于每次生成 RDB 开销较大,非实时持久化,
AOF 持久化原理:开启后,Redis 每执行一个修改数据的命令,都会把这个命令添加到 AOF 文件中。
优点:实时持久化。
缺点:所以 AOF 文件体积逐渐变大,需要定期执行重写操作来降低文件体积,加载慢
5 redis 单线程为什么这么快
redis 是单线程的,但是为什么还是这么快呢,
原因 1: 单线程,避免线程之间的竞争
原因 2 :是内存中的,使用内存的,可以减少磁盘的 io
原因 3:多路复用模型,用了缓冲区的概念,selector 模型来进行的
评论