写点什么

redis 工作原理 (上)

用户头像
Sakura
关注
发布于: 2021 年 03 月 08 日

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 模型来进行的


用户头像

Sakura

关注

还未添加个人签名 2020.09.22 加入

还未添加个人简介

评论

发布
暂无评论
redis工作原理(上)