Redis 是彻底开源免费的,遵照BSD协议,是一个高性能的key-value数据库。程序员
Redis 与其余 key - value 缓存产品有如下三个特色:redis
Redis有着更为复杂的数据结构而且提供对他们的原子性操做,这是一个不一样于其余数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。数据库
Redis运行在内存中可是能够持久化到磁盘,因此在对不一样数据集进行高速读写时须要权衡内存,由于数据量不能大于硬件内存。在内存数据库方面的另外一个优势是,相比在磁盘上相同的复杂的数据结构,在内存中操做起来很是简单,这样Redis能够作不少内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,由于他们并不须要进行随机访问。编程
STRING:字符串、整数或浮点数缓存
LIST:列表,可存储多个相同的字符串安全
SET:集合,存储不一样元素,无序排列网络
HASH:散列表,存储键值对之间的映射,无序排列数据结构
ZSET:有序集合,存储键值对,有序排列多线程
对比项 | Redis | Memcache |
---|---|---|
数据结构 | 丰富数据类型 | 只支持简单 KV 数据类型 |
数据一致性 | 事务 | cas |
持久性 | 快照/AOF | 不支持 |
网络IO | 单线程 IO 复用 | 多线程、非阻塞 IO 复用 |
内存管理机制 | 现场申请内存 | 预分配内存 |
Redis 是基于内存的操做,CPU 不是 Redis 的瓶颈,Redis 瓶颈最有多是内存或网络。并且单线程容易实现,避免了没必要要的上下文切换和竞争条件,不存在多线程切换消耗 CPU编程语言
类型 | 简介 | 特性 | 场景 |
---|---|---|---|
String(字符串) | 二进制安全 | 能够包含任何数据,好比jpg图片或者序列化的对象,一个键最大能存储512M | --- |
Hash(字典) | 键值对集合,即编程语言中的Map类型 | 适合存储对象,而且能够像数据库中update一个属性同样只修改某一项属性值(Memcached中须要取出整个字符串反序列化成对象修改完再序列化存回去) | 存储、读取、修改用户属性 |
List(列表) | 链表(双向链表) | 增删快,提供了操做某一段元素的API | 1,最新消息排行等功能(好比朋友圈的时间线) 2,消息队列 |
Set(集合) | 哈希表实现,元素不重复 | 一、添加、删除,查找的复杂度都是O(1) 二、为集合提供了求交集、并集、差集等操做 | 一、共同好友 二、利用惟一性,统计访问网站的全部独立ip 三、好友推荐时,根据tag求交集,大于某个阈值就能够推荐 |
Sorted Set(有序集合) | 将Set中的元素增长一个权重参数score,元素按score有序排列 | 数据插入集合时,已经进行自然排序 | 一、排行榜 二、带权重的消息队列 |