Redis 简介
redis是一个开源的使用ansi c语言编写、基于内存亦可持久化的日志型、key-value数据库,并提供了对多种编程语言的支持。
redis的外围由一个键、值映射的字典构成,redis提供五种数据类型:string,hash,list,set及zset(sorted set),所以redis也被称为数据结构服务器。
redis是一个key-value存储系统。支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希)。这些数据类型都支持push/pop、add/remove及取交集并集和差集等操作,且redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。
redis的特点
-
redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
-
redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
-
redis支持数据的备份,即master-slave模式的数据备份。
redis 优势
-
性能极高 – redis 是一个高性能的key-value数据库,读的速度能达到110000次/s,写的速度能达到81000次/s 。
-
丰富的数据类型 – redis支持string,hash,list,set及zset(sorted set)等数据类型。
-
原子性 – redis的所有操作都是原子性的,要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过multi和exec指令包起来。
-
丰富的特性 – redis支持 publish/subscribe, 通知, key 过期等特性
- 全量数据格式:把内存中的数据写入磁盘,便于下次读取文件进行加载
- 增量请求文件:把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括set、rpush、sadd、zadd。
redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
-
save seconds updates:save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。
-
appendonly yes/no :appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
-
appendfsync no/always/everysec :appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。
redis运行在内存中但可持久化到磁盘,在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。内存数据库的一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,可以做很多内部复杂性很强的事情。