简介 |
Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库,可用作数据库、缓存、消息代理,是目前最为流行的key-value型内存数据库。推荐使用Linux部署,官方不支持Windows构建。
特性 |
In memory:基于内存,提供更高性能,同时支持持久化(默认开启),数据更安全。
High availability:支持主从复制,通过Redis Sentinel(哨兵模式)实现自动故障转移,保证高可用。
Automatic partition:支持水平扩容,使用Redis Cluster(集群)分布式解决方案,解决单机性能瓶颈。
Pub/Sub:支持发布/订阅,可以作为消息代理中心使用。
Transaction:简单的事务支持,可以理解为命令的批量执行,不支持事务回滚。
Redis还支持Luau脚本,key失效时间设置,LRU(Least Recently Used)算法等特性。
场景 |
- 计数器:可以进行自增自减运算,从而实现计数器功能。如网站访问量的统计,如果使用MySQL数据库进行读写,每一次访问都会进行磁盘I/O操作,影响性能。而Redis这类内存数据库读写性能非常高,很适合频繁读写。
- 缓存:将热点数据加载到内存中,提高查询效率,设置内存的最大使用量及淘汰策略来保证缓存命中率。
- 查找表:与缓存类似,利用了Redis快速的查找特性,与缓存不同的是内容不能失效,如DNS记录。
- 消息队列:List是双向链表,可以通过lpop和Ipush写入和读取消息,实现发布与订阅。
- Session共享:分布式场景下会部署多个应用服务器,可以使用Redis统一存储Session信息,保证单个应用服务器宕机时不会丢失Session信息,从而保证高可用。
- 分布式锁:在分布式场景下,无法使用单机环境下的锁实现。当多个节点上的进程都需要获取同一个锁时,就需要使用分布式锁来进行同步。可以使用
Redis 自带的 SETNX 命令或者使用官方提供的 RedLock 分布式锁实现。
对比 |
Redis与其他key-value型数据库(如Memcached)主要有两大区别:
- Redis不仅支持字符串类型,还支持更为复杂的数据类型,这些数据类型均支持原子操作,更接近于基础数据结构,对程序员友好。
- 基于内存,但支持持久化。并不是所有数据都一致存储在内存中,可以将一些很久未使用的value交换到磁盘中。
参考 |