赞
踩
Redis 是一个非常高效的非关系型数据库
随着互联网的发展,传统的关系型数据库已经不能满足所有的业务场景了,比如电商秒杀活动时候数据库需要瞬间处理大量的请求,非常容易造成数据库崩溃,所以需要引入缓存中间件。开源市场上主流的缓存中间件就是 Redis 和 Memcached,相较之下 Redis 的数据结构更加丰富,扩展性更强,并且原生支持集群模式
Redis 为什么高效
Redis 是一个由事件驱动的程序,因此 Redis 最重要的线程是它的文件事件处理器,这个文件事件处理器是以单线程的方式运行的,但可以通过 I/O 多路复用程序来监听多个 Socket,多路复用程序再将 Socket 交给文件事件分派器,分派器来选择对应的事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)对 Socket 上的事件进行处理
I/O 多路复用程序工作原理
一个 Redis 服务器通常会连接多个 Socket 的,所以会有多个事件并发出现的情况。I/O 多路复用程序会将所有产生事件的 Socket 放在一个队列里面,然后通过这个队列,以有序、同步、每次一个 Socket 的方式向文件事件分派器传送套接字,当上一个 Socket 产生的事件背处理完毕之后,I/O 多路复用程序才会继续传送下一个 Socket
不同的操作系统有不同的多路复用函数,比如 Linux 的 select、poll、epoll。Redis 底层会判断当前操作系统的型号,并且调用性能最好的多路复用函数
String
Hash
应用场景比较少,需要根据实际业务细节来使用
List
Set
Sorted Set
简单动态字符串
对 C 语言的字符串进行了封装,增加了 len 字段,在安全性、效率和功能性上优于 C 语言的字符串
双端链表
是 List 键的底层实现
字典
是 Hash 键和数据库的底层实现
跳跃表
跳跃表的节点包含四个属性:level、backward、score 和 obj
是有序集合键的底层实现之一,还在集群节点中用作内部数据结构,此外,跳跃表在 Redis 里面没有其他用途
平均查询时间复杂度为 O(logn)、最差为 O(n)
整数集合
是 Set 键的底层实现之一
压缩列表
压缩列表是为了节约内存开发的,是一块连续的内存,类似于数组
是 Lish 键和 Hash 键的底层实现之一,当元素较少时就会使用压缩列表
对象
Redis 并不是直接使用上述数据结构实现键值对数据库的,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串键、哈希键、列表键、集合键和有序集合键盘。并且 Redis 的对象带有访问时间记录信息,可以用于计算该对象的空转时长
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。