什么是Redis?
Redis(Remote Dictionary Server)远程字典服务,是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同,Redis中的值可以是由string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)等多种数据结构组成,能够满足很多的应用场景,同时Redis会将所有数据都存放在内存中,读写速度非常快。
基本特性:
基于键值对、读写速度快、数据结构丰富、简单稳定、支持持久化、支持事务(原子性)、主从复制、高可用与分布式。
更多Java学习指南以及最新项目场景题,需要的宝子
Java学习包传送门
为什么说Redis的速度非常快呢?
据官方给出的数字,Redis的读写性可以达到10万/秒,在不考虑硬件性能的化,redis速度如此快的原因可以归纳为一下几点:
(1)Redis中所有数据都是存储在内存中的,CPU对计算器的访问速度中内存远快于外存
(2)Redis是基于C语言实现的,一般来说C语言距离操作系统更近,执行速度相对更快
(3)Redis采用了单线程架构,避免了不必要的上下文切换和竞争条件,线程安全
(4)使用多路 I/O 复用模型,非阻塞 IO;
单线程详解:
- Reds基于 Reactor模式开发的文件事件处理器,它是单线程的,所以Redis才叫做单线程的模型。
- 该处理器采用IO多路复用机制来同时监听多个Socket,根据Socket上的事件类型来选择对应的事件处理器来处理这个事件。可以实现高性能的网络通信模型,又可以跟内部其他单线程的模块进行对接,保证了 Redis内部的线程楼型的简单性。
- 文件事件处理器的结构包含4个部分:多个Socket,IO多路短用程序、文件事件分派器以及事件处理器
- 多个 Socket可能井发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个Socket,会将 Socket放入一个队列中排队,每次从队列中取出一个 Socket给事件分派器,事件分派器把 Socket给对对应的事件处理器,然后一个 Socket的事件处理完之后,IO多路复用程序才会将队列中的下一个 Socket给事件分派器,文件事件分派器会根据每个 Socket当前产生的事件,来选择对应的事件处理器来处理。
为什么要用 Redis?
- 高性能:假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。
- 高并发:直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。
Redis有哪些数据类型
Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求
字符串(String)
字符串类型是Redis最基础的数据结构(key-value 类型),其它的几种数据结构都是在字符串类型基础上构建的,字符串的值可以是:字符串、数字、二进制,但其值最大不能超过512M。
- 特性:二进制安全的,计算字符串长度高效、追加字符串高效
- 使用场景: 缓存、计数器、对象存储缓存(共享session)、限速
列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部或者尾部,也可以获取指定范围指定下标的元素等。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
两个特点:
- 列表中的元素是有序的,可以通过索引下标获取某个元素霍某个某个范围内的元素列表
- 列表中的元素可以是重复的
使用场景: 消息队列、栈、文章列表等。
集合(Set)
Redis的Set是String类型的无序集合,我们不能通过索引获取元素。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
应用场景: 标签(tag)
哈希(Hash)
几乎所有的编程语言都提供了哈希(hash)结构,Redis中 hash 是一个string类型的field和value的映射表value={ {field1,value1},{field2,value2}…},可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。
应用场景: 用户信息缓存
有序集合(Zset)
在有序集合中保留了不能有重复成员的特性,但其中的成员是可以排序的,每一个元素都会关联一个double类型的分数(score)作为排序依据,score相同时按字典顺序排序。redis