Redis,单线程,高速缓存系统!!!(个人总结)

Redis是一款高速的单线程nosql数据库,支持缓存和数据持久化。其速度得益于内存操作、单线程避免上下文切换以及使用epoll的IO多路复用。Redis提供五种数据类型,如String、Hash、List、Set和Sorted Set。持久化方式包括RDB和AOF,过期策略包括多种选项。Redis适用于特定场景,理解其工作原理有助于提升开发效率。
摘要由CSDN通过智能技术生成

Redis,单线程,高速缓存系统!!!(个人总结)

Redis相关知识

曾经面试中面试官问到过Redis相关的东西,由于当时是开发小白,对此了解的相对比较片面,后面的工作中,项目里用到Redis这一款集缓存和数据持久化的nosql数据库系统,现在对这项技术进行简单的总结,希望可以对自己有所提升,为广大开发者提供相关的帮助,本篇文章是本人凭个人记忆进行总结,如和其他开发者有雷同或者重叠的部分,请多多指教,文章如果有不到位的地方,还请各位大佬提出合理意见或建议!

什么是Redis?

Redis是一款高速,单线程,集缓存和数据持久化的nosql数据库,目前在数据库流行排行榜排名第八的一款缓存系统,从流行度上面我们可以看出Redis在市面上的受欢迎程度。Redis是由c语言编写的,所以,Redis的编译过程离不开gcc编译器。同时,Redis可支持事务,日志等功能。

Redis支持的数据类型

Redis支持五种数据类型:
1、String(字符串):string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
2、hash(哈希):Redis hash 是一个键值(key=>value)对集合。Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
3、List(列表):Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
4、Set(集合):Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
5、Sorted Set(zset,有序集合):Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。

Redis是单线程,为什么速度还那么快?

众所周知,Redis是单线程,但是执行速度却非常快,主要因为以下三方面的因素:
1、Redis大多数操作都是运行在内存上进行,完全基于内存,速度非常快。
2、Redis是单线程,可以有效的避免不必要的上下文切换和资源竞争关系。
3、Redis采用的是非阻塞IO,IO多路复用方式(epoll-IO方式)。
说到IO多路复用,不得不说多路复用的三种方式:select,poll,epoll,其中select,poll是线程不安全的,epoll是线程安全的。redis内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间 这3个条件不是相互独立的,特别是第一条,如果请求都是耗时的,采用单线程吞吐量及性能可想而知了。应该说redis为特殊的场景选择了合适的技术方案。
转自:https://blog.csdn.net/lch_2016/article/details/81078243

Redis的两种持久化方式

Redis有两种持久化方式:AOF和RDB。
RDB方式:

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
AOF方式:
在这里插入图片描述
两张图片可以清晰的展示出两种不同方式的持久化方式。

Redis的过期策略

Redis有6种过期策略:
1、volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。2、volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。
3、volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。
4、allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰。
5、allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰。
6、no-enviction(驱逐):禁止驱逐数据,新写入操作会报错。
开发的过程不只是死记硬背,而是结合实际开发过程中,不断地去理解和感悟,才能更加深刻的
对相关知识进行总结和掌握。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值