本文详细介绍了Redis的主要特点、应用场景、数据类型及命令操作,并提供了安装配置和实践案例。Redis资料涵盖了从基础概念到高级用法的全面解析。
Redis 是一个开源的内存数据库,被广泛用于缓存、消息队列、实时分析等多个应用场景。它是由Salvatore Sanfilippo用C语言编写,作为一个高性能的键值对存储系统,Redis支持多种数据类型,并提供丰富的特性支持。
Redis 支持多种数据类型,每种类型都有特定的操作命令。下面列出一些常见的数据类型:
# 基于字符串类型的操作 SET key1 "value1" GET key1 # 基于哈希类型的操作 HSET user:1 name "Alice" HGET user:1 name # 基于列表类型的操作 LPUSH list1 "value1" RPOP list1 # 基于集合类型的操作 SADD set1 "value1" SMEMBERS set1 # 基于有序集合类型的操作 ZADD rank:1 1 user:1 ZRANGE rank:1 0 -1 # 位图操作示例 SETBIT bitmap 0 1 GETBIT bitmap 0 # 地理空间操作示例 GEOADD world 134.6219 35.6895 "Tokyo" GEOADD world 151.2093 33.8688 "Sydney" GEODIST world Tokyo Sydney km GEORADIUS world 134.6219 35.6895 200 km
Redis 命令操作丰富,基于不同的数据类型提供了对应的命令。以下是常用的命令分类:
# 设置和获取字符串值 SET key1 "value1" GET key1 # 列表操作 LPUSH list1 "value1" RPUSH list1 "value2" LPOP list1 RPOP list1 # 哈希操作 HSET user:1 name "Alice" HGET user:1 name # 集合操作 SADD set1 "value1" SADD set1 "value2" SMEMBERS set1 # 有序集合操作 ZADD rank:1 1 user:1 ZADD rank:1 2 user:2 ZRANGE rank:1 0 -1
Redis 提供了两种持久化方式:
# 配置RDB持久化 save 60 10000 # 每60秒如果至少有10000个键被更改,则保存一份快照 # 配置AOF持久化 appendonly yes appendfsync everysec
在 Windows 环境安装 Redis,需要先安装 Visual Studio C++ 编译器,再下载 Redis Windows 版本。
redis-server.exe
启动 Redis 服务。# 配置文件 redis.windows.conf bind 127.0.0.1 port 6379 requirepass yourpassword # 设置密码
在 Linux 环境安装 Redis,可以使用包管理器或者从源码编译安装。
使用包管理器(如 apt、yum)安装 Redis:
# Ubuntu/Debian sudo apt-get update sudo apt-get install redis-server # CentOS/RHEL sudo yum install epel-release sudo yum install redis
启动 Redis 服务:
# 启动服务 sudo systemctl start redis # 设置开机启动 sudo systemctl enable redis
从源码编译安装 Redis:
# 下载 Redis 源码 git clone https://github.com/redis/redis.git cd redis # 编译 Redis make # 安装 Redis sudo make install
# 配置文件 redis.conf bind 127.0.0.1 port 6379 requirepass yourpassword # 设置密码 logfile /var/log/redis/redis.log # 设置日志文件
Redis 的配置文件 redis.conf
中包含各种配置项,主要分为以下几个部分:
# 服务器配置 bind 127.0.0.1 port 6379 requirepass yourpassword # 内存配置 maxmemory 1gb maxmemory-policy allkeys-lru # 持久化配置 save 60 10000 appendonly yes appendfsync everysec # 安全配置 rename-command SHUTDOWN "" # 禁用 SHUTDOWN 命令 requirepass yourpassword # 日志配置 logfile /var/log/redis/redis.log loglevel notice
字符串是 Redis 最基本的数据类型,支持多种操作命令。
SET key value
:设置 key 对应的值。GET key
:获取 key 对应的值。MSET key1 value1 key2 value2 ...
:同时设置多个 key 的值。MGET key1 key2 ...
:同时获取多个 key 的值。DEL key
:删除 key 及其对应的值。EXPIRE key seconds
:设置 key 的过期时间。# 设置和获取字符串值 SET key1 "value1" GET key1 # 设置多个字符串值 MSET key2 "value2" key3 "value3" MGET key2 key3 # 删除字符串 DEL key1 # 设置过期时间 EXPIRE key2 60 # key2 在60秒后过期
集合是 Redis 中的一种无序数据结构,支持集合操作。
SADD key member
:向集合添加一个成员。SMEMBERS key
:返回集合中的所有成员。SPOP key
:移除并返回集合中的一个随机成员。SREM key member
:移除集合中的一个成员。SCARD key
:返回集合中的元素数量。SISMEMBER key member
:判断成员是否存在于集合中。# 添加集合成员 SADD set1 "value1" SADD set1 "value2" # 获取集合成员 SMEMBERS set1 # 随机移除一个集合成员 SPOP set1 # 删除集合成员 SREM set1 "value1" # 检查成员是否存在 SISMEMBER set1 "value2"
有序集合是 Redis 中的一种数据类型,支持带分数的集合操作。
ZADD key score member
:向集合添加一个成员。ZRANGE key start stop
:获取集合中的成员。ZREVRANGE key start stop
:逆序获取集合中的成员。ZREM key member
:移除集合中的一个成员。ZRANGEBYSCORE key min max
:按分数范围获取成员。ZREVRANGEBYSCORE key max min
:按逆序分数范围获取成员。ZCARD key
:返回集合中的元素数量。ZCOUNT key min max
:按分数范围返回元素数量。# 添加有序集合成员 ZADD rank:1 1 user:1 ZADD rank:1 2 user:2 ZRANGE rank:1 0 -1
Redis 提供了丰富的位操作命令,支持位图操作。
SORT key
:对集合中的成员进行排序。SORT key BY pattern
:按给定的模式进行排序。SORT key STORE destination
:将排序结果存储到指定的集合中。SETBIT key offset value
:设置指定位置的位值。GETBIT key offset
:获取指定位置的位值。BITOP operation destkey key1 key2 ...
:执行位操作运算。BITCOUNT key start end
:统计指定范围中值为 1 的位数。# 排序命令示例 LRANGE list1 0 -1 # 获取列表元素 SORT list1 STORE sorted_list # 排序后存储到sorted_list # 位操作命令示例 SETBIT bitmap 0 1 GETBIT bitmap 0 BITOP AND destkey key1 key2 BITCOUNT destkey
缓存可以提高应用的性能,减少数据库压力。Redis 作为内存数据库,非常适合用作缓存。
import redis # 创建Redis连接 r = redis.Redis(host='localhost', port=6379, db=0) # 设置缓存数据 r.set('key1', 'value1') # 获取缓存数据 r.get('key1') # 删除缓存数据 r.delete('key1')
import redis.clients.jedis.Jedis; public class RedisCacheExample { public static void main(String[] args) { Jedis jedis = new Jedis("localhost", 6379); jedis.set("key1", "value1"); String value = jedis.get("key1"); jedis.del("key1"); jedis.close(); } }
网站可以通过 Redis 实现会话存储、访问统计等功能。
import redis # 创建Redis连接 r = redis.Redis(host='localhost', port=6379, db=0) # 设置会话 r.set('session:12345', 'username:alice,preferences:dark-mode') # 获取会话 r.get('session:12345') # 删除会话 r.delete('session:12345')
import redis.clients.jedis.Jedis; public class RedisSessionExample { public static void main(String[] args) { Jedis jedis = new Jedis("localhost", 6379); jedis.set("session:12345", "username:alice,preferences:dark-mode"); String session = jedis.get("session:12345"); jedis.del("session:12345"); jedis.close(); } }
Redis 可以用来实现简单的队列,支持先进先出(FIFO)和后进先出(LIFO)两种方式。
import redis # 创建Redis连接 r = redis.Redis(host='localhost', port=6379, db=0) # 将任务添加到队列 r.rpush('task_queue', 'task1') r.rpush('task_queue', 'task2') # 从队列中取出任务 task = r.lpop('task_queue')
import redis.clients.jedis.Jedis; public class RedisQueueExample { public static void main(String[] args) { Jedis jedis = new Jedis("localhost", 6379); jedis.rpush("task_queue", "task1"); jedis.rpush("task_queue", "task2"); String task = jedis.lpop("task_queue"); jedis.close(); } }
可以通过 Redis 自带的命令和第三方工具监控 Redis 性能。
INFO
:获取 Redis 服务器的运行状态信息。MONITOR
:实时监控 Redis 命令执行情况。SLOWLOG
:记录执行时间较长的命令。# 获取服务器信息 INFO # 实时监控命令 MONITOR
Redis 的内存管理对于性能优化非常重要。
CONFIG GET maxmemory
:查看最大内存设置。CONFIG SET maxmemory
:设置最大内存。CONFIG SET maxmemory-policy
:设置内存回收策略。# 查看最大内存设置 CONFIG GET maxmemory # 设置最大内存 CONFIG SET maxmemory 1gb # 设置内存回收策略 CONFIG SET maxmemory-policy allkeys-lru
Redis 的持久化功能可以实现数据备份和恢复。
SAVE
:同步地将数据持久化到磁盘(不建议使用,会阻塞 Redis 服务)。BGSAVE
:异步地将数据持久化到磁盘。SHUTDOWN
:保存数据并关闭 Redis 服务。RESTORE key ttl serialized-value
:从备份文件中恢复数据。# 异步备份 BGSAVE # 关闭服务并保存数据 SHUTDOWN # 从备份文件中恢复数据 RESTORE key1 100 "value1"