一、介绍
Nosql 非关系型数据库 key ==> value
Redis是 Remote Dictionary Server (远程数据服务)的缩写
由意大利人antirez(Salvatore Sanfilippo) 开发的一款高速缓存数据库
软件由C语言编写,Redis的数据模型是 key-value
Redis支持丰富的数据结构,比如String list(双向链表) hash(哈希) set(集合) sorted set(有序集合)
Rdis可持久化(保存数据到硬盘中),为了保证数据安全。
二、业务场景
- ①[Sort Set]排行榜应用,取top n操作,例如sina微博热门话题
- ②[List]获得最新N个数据 或 某个分类的最新数据
- ③[String]计数器应用
- ④[Set]sns(social network site)获得共同好友
- ⑤[Set]防攻击系统(ip判断)黑白名单等等
三、对比Memcached
Redis:
- 支持多种数据结构,不仅仅支持简单的k/v类型,同时还提供list,set,zset,hash等多种数据结构存储。
- 支持master-slave(主从模式应用)。
- 支持数据持久化,将内存中的数据存储到硬盘中,重启的时候可以再次加载使用。
- Redis单个value存储string的最大存储限制是512MB。
- Redis是单核,对应key-vlaue结构的简单数据存储,内存使用率低。使用hash结构数据存储,内存使用率会更高。
- Redis 的 key 长度最大为 2GB。
- 不能处理读取时的高流量,也不能处理繁重的写入。
Memcached:
- 不支持主从复制,也不支持数据持久化。
- Memcached是多核。对应hash结构的数据存储,内存使用率更低。
- Memcached单个value存储string的最大存储限制是1MB。
- Memcached 的 key 长度最多为 250 个字节。
- 适合处理高流量网站。它可以一次读取许多信息,并在很长的响应时间内返回。
四、数据结构类型
已知Redis有一下数据结构类型:String(key-value)、list、Hash、Set、Zset(sortedset)
1.String
string是redis最基本的类型,Redis的字符串是动态字符串,是可以修改的字符串。
Redis的string可以包含任何数据。包括jpg图片 base64或者序列化的对象
单个value值最大上限是512MB
如果只用string类型,redis就可以被看作加上持久化特性的memcached
2.List
key value(value1,value2,value3)
List的存储结构用的是双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素
这使得list既可以用作栈,也可以用作队列
同一端进出 先进后出 栈
一端 另外一端出 先进先出 队列
3.Set
Redis的set是String类型的无序集合,集合里面不包含重复元素。
set元素最大可以包含(2的32次方-1)个元素。
关于set集合类型除了基本的添加删除操作,其他常用的操作还包含集合的取 并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能。
4.Zset
和set一样sorted set也是string类型元素的集合,有序集合,元素不允许重复
不同的是每个元素都会关联一个权。
通过权值可以有序的获取集合中的元素,可以通过score值进行排序
5.Hash
Hash在实现结构上它使用二维结构,第一维是数组,第二维是链表,Hash的内容key和value存放在链表中,数组里存放的是链表的头指针。通过key查找元素时,先计算key的hashcode,然后用hashcode对数组的长度进行取模定位到链表的表头,再对链表进行遍历获取到相应的value值,链表的作用就是用来将产生了「hash碰撞」的元素串起来。
五、数据持久化
Redis支持数据持久化(数据在服务或者软件重启之后不会丢失)
然后数据只存在与内存中,肯定会丢失,实现持久化,就是将数据存储到磁盘中(hdd或者ssd)
1.snappshoting(快照)
默认snappshoting是开启的,在配置文件里可以看到。
2.append noly file(aof)
总结:
snappshoting 一般的数据持久化使用,效率高,数据迁移方便
aof 适合于备份、数据实时性备份要求更高的情况