Redis主要是用来做数据缓存的,Redis运行在内存中,数据也保存在内存中
缓存———让数据离程序更近
一般把Redis叫做中间件
NOSQL
Not only SQL(不仅仅是SQL),泛指非关系型的数据库
关系型数据库:使用标准的SQl语言进行操作
非关系型数据库:没有固定的关系,以键值对的形式存储
key—value menuLIst:[{},{},{}] key:hash
不是相互替代的,是相辅相成的
Redis
是键值对存储在内存中,也可以存储在硬盘上
存储结构简单,性能高,易于扩展,支持多语言,保证操作原子性
支持多种数据类型
关系型数据库
不能代替,基本的数据还是存储在关系型数据库中
优点:易于维护,使用方便,通用的SQL语言
缺点:IO瓶颈
非关系型数据库
优点:结构简单易扩展,高性能,灵活的数据模型
缺点:只适合存放简单数据,不适合放时间太久,不适合存放海量数据
Redis数据类型
Redis有五种数据类型:String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)
底层数据结构一共有6种:
简单动态字符串,双向链表,压缩链表,哈希表,跳表,整数数组
全局hash表
hash可以在O(1)的时间内计算出hash值并且找到对应的entry位置,entry里面也是一个个key指针和value指针
问:如何避免hash冲突?
答:可以通过链式哈希解决冲突,也就是将一个桶里面的元素使用链表保存。但是当链表过长就会产生查找性能表差。Redis为了追求快,使用两个全局哈希表。用于rehash操作,增加现有的哈希桶数量,减少哈希冲突
String
String是Redis最基本类型,一个key对应一个value。
String是二进制安全的。意思是String可以包含任何数据。例如jpg图片或者序列化对象
String最大可以存储512MB
hash
Redis hash是一个String类型的field和value映射表,hash特别适合用于存储对象(对对象中的数据发生修改情况)
存的是字符串和字符串中的映射,比如要存储用户购物车等信息
List
Redis是简单的字符串链表,按照插入顺序排序,可以添加一个元素到链表的头部和尾部。
适用场合:可以存储接收到的信息数据
Set
Redis是Set的无序集合
ZSet
ZSet也是不可以重复的集合,但是是有序的。
不同的是每个元素都关联了一个double类型的分数。Redis正是通过分数来为元素排序的。
ZSet成员是唯一的,但是分数(score)可以重复
设置失效时间
有时候我们不希望Redis的key一直存在,就类似于验证码,缓存等数据,我们希望它们能在一定的时间内自动被销毁。Redis提供了一些命令,给key设置过期时间,时间到了自动销毁。
