文章目录
一、Redis 简介
Redis(Remote Dictionary Server)是一个开源的高性能键值对存储数据库,由 Salvatore Sanfilippo 编写,使用 C 语言开发。它支持多种数据类型,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)、范围(ranges)、位图(bitmaps)、超日志(hyperloglogs)和地理空间索引(geospatial indexes)等。Redis 具有高速读写能力,常被用于缓存、消息队列、排行榜等场景。
二、NoSQL 数据库概述
NoSQL(Not Only SQL)数据库是一种非关系型数据库,与传统的关系型数据库(如 MySQL、Oracle、SQL Server 等)相比,NoSQL 数据库具有更高的灵活性和扩展性。NoSQL 数据库主要分为以下四大类:
- 键值对(Key-Value)数据库:使用哈希表存储数据,键唯一,值可以是任意类型。例如 Redis、SSDB、Oracle BDB 等。
- 列存储(Columnar Storage)数据库:数据按列存储,适合大数据量的读写操作。例如 HBase。
- 文档型数据库:以 JSON 或 BSON 格式存储文档数据,适合存储结构化或半结构化数据。例如 MongoDB、SQLite。
- 图形数据库:用于存储和查询复杂的图形数据结构。例如 InfoGrid。
NoSQL 数据库适用于数据模型简单、灵活性强、对性能要求高且不需要高度数据一致性的场景。在实际应用中,NoSQL 数据库通常与关系型数据库配合使用,作为中间件或缓存层。
三、Redis 的安装与配置
1. 安装 Redis
Redis 是用 C 语言编写的,因此在安装之前需要确保系统已安装 GCC 编译器。
yum install -y gcc
进入 Redis 解压目录,执行以下命令进行编译和安装:
make MALLOC=libc
make install PREFIX=/usr/redis
如果系统中没有 make
命令,可以先安装 make
工具:
yum install -y make
安装完成后,Redis 的可执行命令会位于 /usr/redis/bin
目录下。
2. 启动 Redis
进入 Redis 的 bin
目录,启动 Redis 服务:
./redis-server
默认情况下,Redis 使用 redis.conf
配置文件中的设置启动。如果需要指定配置文件,可以将 redis.conf
复制到安装目录,并修改相关配置项(如端口号等)。然后使用以下命令启动 Redis:
./redis-server ../redis.conf
3. 停止 Redis
Redis 提供了 redis-cli
工具用于与 Redis 服务交互。停止 Redis 服务可以使用以下命令:
./redis-cli shutdown
四、Redis 的基本操作
1. 数据库管理
Redis 内置了 16 个数据库(索引 0-15),可以通过 SELECT
命令切换数据库。例如:
SELECT 1
切换到数据库 1。
常用数据库管理命令:
FLUSHDB
:清空当前数据库。FLUSHALL
:清空所有数据库。EXIT
:退出 Redis 客户端。
2. 键操作
Redis 中的键是唯一的,可以使用以下命令对键进行操作:
DEL key [key...]
:删除一个或多个键。EXISTS key
:检查键是否存在,返回 1 表示存在,0 表示不存在。EXPIRE key seconds
:为键设置过期时间(秒)。KEYS pattern
:查找符合指定模式的键。MOVE key db
:将键从当前数据库移动到指定数据库。RENAME key newkey
:重命名键。TYPE key
:查看键的数据类型。
3. 数据类型及操作
(1)String 类型
String 是 Redis 最基本的数据类型,用于存储字符串、数字等数据。常用命令:
SET key value
:设置键值对。GET key
:获取键的值。MSET key1 value1 [key2 value2 ...]
:同时设置多个键值对。MGET key1 [key2 ...]
:同时获取多个键的值。GETSET key value
:获取键的原始值,并设置新的值。STRLEN key
:获取键存储的数据长度。APPEND key value
:为键追加内容。GETRANGE key start end
:截取键的值,start
和end
为索引。SETEX key seconds value
:设置键的存活有效期(秒)。PSETEX key milliseconds value
:设置键的存活有效期(毫秒)。SETNX key value
:如果键不存在,则设置键值对。MSETNX key1 value1 [key2 value2 ...]
:同时设置多个键值对,原子操作。DECR key
:对键的值进行 -1 操作。DECRBY key decrement
:对键的值进行 -n 操作。INCR key
:对键的值进行 +1 操作。INCRBY key increment
:对键的值进行 +n 操作。INCRBYFLOAT key increment
:对键的值进行浮点数加法操作。
(2)List 类型
List 是一个有序的字符串列表,可以使用 LPUSH
和 RPUSH
命令在列表的头部或尾部添加元素。常用命令:
LPUSH key value1 [value2 ...]
:在列表头部添加一个或多个元素。RPUSH key value1 [value2 ...]
:在列表尾部添加一个或多个元素。LPOP key
:移除并返回列表头部的元素。RPOP key
:移除并返回列表尾部的元素。LPUSHX key value
:在列表头部添加元素,仅当键存在时有效。RPUSHX key value
:在列表尾部添加元素,仅当键存在时有效。LINDEX key index
:获取列表中指定索引的元素。LSET key index value
:设置列表中指定索引的元素值。LREM key count value
:移除列表中与指定值匹配的元素。LTRIM key start stop
:保留列表中指定索引范围内的元素。LLEN key
:获取列表的长度。LINSERT key BEFORE|AFTER pivot value
:在列表中指定元素前或后插入新元素。
(3)Set 类型
Set 是一个无序的字符串集合,元素唯一。常用命令:
SADD key member1 [member2 ...]
:向集合中添加一个或多个元素。SREM key member1 [member2 ...]
:从集合中移除一个或多个元素。SPOP key
:移除并返回集合中的一个随机元素。SMOVE source destination member
:将元素从一个集合移动到另一个集合。SCARD key
:获取集合的元素个数。SISMEMBER key member
:检查元素是否存在于集合中。SRANDMEMBER key [count]
:随机返回集合中的元素。SINTER key1 [key2 ...]
:返回多个集合的交集。SUNION key1 [key2 ...]
:返回多个集合的并集。SDIFF key1 [key2 ...]
:返回多个集合的差集。
(4)Hash 类型
Hash 类型是一个键值对集合,键为字符串,值可以是字符串、数字等。常用命令:
HSET key field value
:设置哈希表中指定字段的值。HGET key field
:获取哈希表中指定字段的值。HDEL key field1 [field2 ...]
:删除哈希表中一个或多个字段。HEXISTS key field
:检查哈希表中指定字段是否存在。HGETALL key
:获取哈希表中所有字段和值。HINCRBY key field increment
:对哈希表中指定字段的值进行 +n 操作。HINCRBYFLOAT key field increment
:对哈希表中指定字段的值进行浮点数加法操作。HKEYS key
:获取哈希表中所有字段。HVALS key
:获取哈希表中所有值。HLEN key
:获取哈希表中字段的数量。
(5)Zset 类型
Zset(Sorted Set)是一个有序集合,元素带有分数,按分数排序。常用命令:
ZADD key score1 member1 [score2 member2 ...]
:向有序集合中添加元素。ZREM key member1 [member2 ...]
:从有序集合中移除元素。ZINCRBY key increment member
:对有序集合中指定元素的分数进行 +n 操作。ZSCORE key member
:获取有序集合中指定元素的分数。ZRANK key member
:获取有序集合中指定元素的排名(按升序)。ZREVRANK key member
:获取有序集合中指定元素的排名(按降序)。ZRANGE key start stop [WITHSCORES]
:获取有序集合中指定索引范围内的元素。ZREVRANGE key start stop [WITHSCORES]
:获取有序集合中指定索引范围内的元素(按降序)。ZCARD key
:获取有序集合中元素的数量。ZCOUNT key min max
:获取有序集合中分数在指定范围内的元素数量。ZREMRANGEBYRANK key start stop
:移除有序集合中指定排名范围内的元素。ZREMRANGEBYSCORE key min max
:移除有序集合中分数在指定范围内的元素。
五、总结
Redis 是一个功能强大的 NoSQL 数据库,具有高性能、高灵活性和丰富的数据类型。通过学习 Redis 的基本概念、安装配置和常用命令,可以更好地理解其在实际应用中的作用。Redis 适用于缓存、消息队列、排行榜等多种场景,是现代互联网架构中不可或缺的一部分。