1、Redis入门
1.1 Redis简介
Redis是一个开源的、高性能的键值对存储数据库,它支持多种数据结构,如字符串、哈希、列表、集合等。Redis的最大特点是数据存储在内存中,可以实现非常快速的读写操作,同时也支持将数据持久化存储到磁盘中。同时,Redis还提供一系列的操作命令,可以对数据进行操作和处理。
1.2 Redis下载与安装
Redis的下载可以在官方网站(https://redis.io/)上进行获取。
Redis的安装步骤相对简单,根据官方文档进行下载,解压后进入解压后的目录,执行以下命令:
make
make install
这将会编译Redis并将可执行文件安装到系统路径中。完成安装后,可以通过以下命令启动Redis:
redis-server
1.3 Redis的数据结构
Redis支持多种数据结构,这些数据结构包括字符串、哈希、列表、集合以及有序集合等。下面我简要介绍一下这些数据结构:
1.3.1 字符串(String)
字符串是Redis最基本的数据类型,可以存储任何类型的数据,包括二进制数据。操作字符串的命令有以下几种:
SET key value - 设置指定key的值
GET key - 获取指定key的值
DEL key - 删除指定key
MSET key1 value1 key2 value2 ... - 批量设置值
MGET key1 key2 ... - 批量获取值
1.3.2 哈希(Hash)
哈希是Redis的一个键值对集合,适合存储对象。操作哈希键的命令有以下几种:
HSET key field value - 设置指定key中的指定field为value
HGET key field - 获取指定key中的指定field的值
HDEL key field1 field2 ... - 删除指定key中的指定field
HMSET key field1 value1 field2 value2 ... - 批量设置指定key中的多个field
HMGET key field1 field2 ... - 批量获取指定key中的多个field的值
1.3.3 列表(List)
列表是一个有序的字符串列表,通过push/pop命令可以在列表的头部或尾部添加/删除元素,可以用作队列或栈。操作列表的命令有以下几种:
LPUSH key value1 value2 ... - 在列表头部插入多个值
LPOP key - 删除并返回列表头部的值
RPUSH key value1 value2 ... - 在列表尾部插入多个值
RPOP key - 删除并返回列表尾部的值
LINDEX key index - 返回指定索引处的列表元素
1.3.4 集合(Set)
集合是一个无序的、唯一的字符串集合,适合处理一些唯一性问题。操作集合的命令有以下几种:
SADD key member1 member2 ... - 添加一个或多个成员到集合中
SREM key member1 member2 ... - 从集合中删除一个或多个成员
SISMEMBER key member - 判断一个元素是否在集合中
SMEMBERS key - 返回集合中的所有成员
1.3.5 有序集合(Sorted Set)
有序集合是一个可以排序的字符串集合,也可以用于处理唯一性问题。每个元素都与分数关联,分数可以用来排序和过滤元素。操作有序集合的命令有以下几种:
ZADD key score1 member1 score2 member2 ... - 添加一个或多个成员到有序集合中
ZREM key member1 member2 ... - 从有序集合中删除一个或多个成员
ZRANGE key start end [WITHSCORES] - 返回有序集合中一定范围内的成员
ZREVRANGE key start end [WITHSCORES] - 返回有序集合中一定范围内的成员,按照分数从大到小排序
2、Redis持久化
2.1 Redis持久化介绍
Redis目前提供了两种持久化方式:RDB(Redis Database)和AOF(Append Only File)。
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,它是将数据集在某个时间点进行快照存储,可以通过快照文件恢复数据。而AOF持久化则是将每次执行的写命令追加到文件末尾,可以通过重新执行Append Only文件中的所有写命令来恢复数据。
2.2 RDB持久化
RDB持久化是Redis默认的持久化方式,在指定的时间间隔内保存Redis数据集的快照,具有较好的性能和伸缩性。RDB文件是一个经过压缩的二进制文件,包含了Redis在某个时间点的数据集快照。
在Redis的配置文件(redis.conf)中,可以通过设置save参数制定在什么时间间隔内,有多少次写操作,就将Redis的数据集快照写入硬盘。例如,下面的配置表示如果在900秒内至少有1个键被修改,则Redis会对当前的数据集进行快照。
save 900 1
当Redis在正常运行期间退出时(例如进程被意外终止),可以通过加载RDB文件恢复数据。Redis可以通过两种方式执行RDB文件的加载:
自动载入 - Redis在启动时检查是否存在RDB文件,如果存在则自动载入数据。
手动载入 - 载入指定的快照文件来恢复数据,可以使用以下命令来进行恢复:
redis-server --dir /path/to/redis/db --dbfilename dump.rdb
2.3 AOF持久化
AOF持久化记录每个写操作的处理过程,将这些操作按照顺序追加到Append Only 文件中。当Redis重启时,通过重新执行Append Only文件中的所有写命令,可以恢复数据。与RDB相比,AOF持久化有更好的数据可靠性和灵活性,但同时也增加了IO负载和文件大小。
在Redis的配置文件(redis.conf)中,可以通过设置appendonly参数为yes启用AOF持久化。当appendfsync参数被设置为always时,Redis会在每次写操作完成后执行fsync操作,保证数据的持久性。当appendfsync参数被设置为everysec时,Redis会在每秒钟执行一次fsync操作。而当appendfsync参数被设置为no时,Redis会将写入操作交给操作系统进行处理,写入速度最快,但数据的持久性也最差。
appendonly yes
appendfsync always
2.4 RDB与AOF的选择
RDB持久化适合用于备份或过载时快速重启,而AOF持久化适合用于实时数据采集和数据可靠性方面的要求较高的场景。在实际生产环境中,可以根据业务需求和核心存储数据的大小选择合适的持久化方式。