1.2.2内存存储与持久化
- Redis数据库中的所有数据都存储在内存中。
- 因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势,
- 普通笔记本电脑上,
- Redis可以在一秒内读写超过10万个键值。
- 将数据存储在内存中也有问题,程序退出后内存中的数据会丢失。
- Redis提供对持久化的支持,
- 可将内存中的数据异步写入到硬盘中,
- 同时不影响继续提供服务。
1.2.3功能丰富
- 虽然是作为数据库开发的,但由于其提供了丰富的功能,
- 越来越多的人将其用作缓存、队列系统等。
- Redis可为每个键设置生存时间( Time To Live,TTL),
- 生存时间到期后键会自动被删除。
- 这一功能配合出色的性能让Redis可以作为缓存系统来使用,
- 且由于 Redis支持持久化和丰富的数据类型,
- 使其成为另一个非常流行的缓存系统 Memcached的有力竞争
- Redis是单线程模型
- Memcached支持多线程,
- 多核服务器上后者性能理论上相对更高些。
- Redis的性能已经足够优异,在绝大部分场合下其性能都不会成为瓶颈,所以在使用时更应该关心的是二者在功能上的区别。
- 随着Redis3.0推出,Memcached几乎所有功能都成为了Redis的子集。
- Redis对集群的支持使得 Memcached原有的第三方集群エ具不再成为优势。
- 新项目中用Redis代替Memcached是非常好
- 作为缓存系统, Redis还可限定数据占用的最大内存空间,
- 数据达到空间限制后
- 按一定的规则自动淘汰不需要的键
- Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,
- 很容易实现一个高性能的优先级队列。
- 同时在更高层面上, Redis还支持“发布/订阅”的消息模式,
- 可基于此构建聊天室等系统。
1.2.4简单稳定
- Redis直观的存储结构使得通过程序与Redis交互十分简单。
- 关系数据库中获取posts表内id为1的记录的title字段的值用如下SQL
select title from posts where id = 1 limit 1
- Redis中要读取键为post:1的散列类型键的 title字段的值,
- 可用如下命令语句实现:
HGET post:1 title
- HGET就是一个命令。
- Redis提供100多个命令(如图1-1所示),但常用只十几个