redis学习之路(一)

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特点

(1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2)Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久化。
(3)Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
(4)Redis支持数据的备份,即master-slave模式的数据备份。

性能极高 – Redis 是一个高性能的key-value数据库,读的速度能达到110000次/s,写的速度能达到81000次/s 。
相比于许多键值数据存储系统,Redis有丰富的数据类型 – Redis支持string,hash,list,set及zset(sorted set)等数据类型。
原子性 – Redis的所有操作都是原子性的,要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
丰富的特性 – Redis支持 publish/subscribe, 通知, key 过期等特性

redis使用了两种文件格式:
全量数据格式:把内存中的数据写入磁盘,便于下次读取文件进行加载
增量请求文件:把内存中的数据序列化为操作请求,用于读取文件进行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运行在内存中但可持久化到磁盘,在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。内存数据库的一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,可以做很多内部复杂性很强的事情。

Redis命令目录

Key(键)String(字符串)Hash(哈希表)List(列表)Set(集合)SortedSet(有序集合)
DELAPPENDHDELBLPOPSADDZADD
DUMPBITCOUNTHEXISTSBRPOPSCARDZCARD
EXISTSBITOPHGETBRPOPLPUSHSDIFFZCOUNT
EXPIREDECRHGETALLLINDEXSDIFFSTOREZINCRBY
EXPIREATDECRBYHINCRBYLINSERTSINTERZRANGE
KEYSGETHINCRBYFLOATLLENSINTERSTOREZRANGEBYSCORE
MIGRATEGETBITHKEYSLPOPSISMEMBERZRANK
MOVEGETRANGEHLENLPUSHSMEMBERSZREM
OBJECTGETSETHMGETLPUSHXSMOVEZREMRANGEBYRANK
PERSISTINCRHMSETLRANGESPOPZREMRANGEBYSCORE
PEXPIREINCRBYHSETLREMSRANDMEMBERZREVRANGE
PEXPIREATINCRBYFLOATHSETNXLSETSREMZREVRANGEBYSCORE
PTTLMGETHVALSLTRIMSUNIONZREVRANK
RANDOMKEYMSETHSCANRPOPSUNIONSTOREZSCORE
RENAMEMSETNXRPOPLPUSHSSCANZUNIONSTORE
RENAMENXPSETEXRPUSHZINTERSTORE
RESTORESETRPUSHXZSCAN
SORTSETBIT
TTLSETEX
TYPESETNX
SCANSETRANGE
CSTRLEN

事务

事务可以一次执行多个命令, 并且带有以下两个重要的保证:

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
EXEC 命令负责触发并执行事务中的所有命令:
如果客户端在使用 MULTI 开启了一个事务之后,却因为断线而没有成功执行 EXEC ,那么事务中的所有命令都不会被执行。
另一方面,如果客户端成功在开启事务之后执行 EXEC ,那么事务中的所有命令都会被执行。
当使用 AOF 方式做持久化的时候, Redis 会使用单个 write(2) 命令将事务写入到磁盘中。
然而,如果 Redis 服务器因为某些原因被管理员杀死,或者遇上某种硬件故障,那么可能只有部分事务命令会被成功写入到磁盘中。
如果 Redis 在重新启动时发现 AOF 文件出了这样的问题,那么它会退出,并汇报一个错误。
使用 redis-check-aof 程序可以修复这一问题:它会移除 AOF 文件中不完整事务的信息,确保服务器可以顺利启动。

持久化

Redis 提供了多种不同级别的持久化方式:

  1. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
  2. AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
  3. Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值