redis基本操作

Redis(Remote Dictionary Server)是一个开源的、高性能的键值对(Key-Value)存储数据库,广泛应用于缓存、消息队列、实时分析等场景。它以其极高的读写速度、丰富的数据结构和灵活的应用方式而受到开发者的青睐。

Redis 的主要特点

  1. 高性能

    • 内存存储:Redis 将所有数据存储在内存中,读写速度极快,适合对性能要求高的应用。
    • 持久化:支持将内存中的数据持久化到磁盘,防止数据丢失。
  2. 丰富的数据结构

    • 字符串(String)​:最基本的数据类型,可以存储文本或二进制数据。
    • 哈希(Hash)​:键值对的集合,适合存储对象。
    • 列表(List)​:有序的字符串集合,支持在两端进行快速的插入和删除操作。
    • 集合(Set)​:无序且不重复的字符串集合,支持高效的集合运算(如并集、交集、差集)。
    • 有序集合(Sorted Set)​:类似于集合,但每个元素关联一个分数,用于排序。
    • 位图(Bitmap)​HyperLogLog地理空间索引(Geospatial Index)​等高级数据结构。
  3. 持久化机制

    • RDB(Redis Database Backup)​:定期将内存中的数据快照保存到磁盘。
    • AOF(Append-Only File)​:记录所有写操作命令,通过重放这些命令来恢复数据

Redis 的应用场景

  1. 缓存

    作为数据库的缓存层,减轻数据库的压力,提高数据访问速度。

  2. 消息队列

    利用列表、发布/订阅等特性实现消息队列,用于异步处理和解耦系统组件。

  3. 实时分析

    使用 Redis 的快速读写特性进行实时数据分析和统计,如实时排行榜、计数器等。

  4. 会话存储

    存储用户会话信息,支持分布式应用的会话管理。

  5. 分布式锁

    利用原子操作实现分布式锁,确保在分布式环境下的资源同步。

  6. 丰富的客户端支持

  • 提供多种编程语言的客户端库,如 Python、Java、Node.js、C++ 等,方便开发者集成。

1. Redis 的安装与配置

以下以 windows系统为例

解压下载的压缩包。

双击start.bat 启动redis服务。

进入到dos。切换到解压目录,输入 redis-cli 执行客户端。

测试 Redis 连接

复制代码
redis-cli ping

如果返回 PONG,表示连接成功。

配置 Redis

Redis 的主要配置文件位于redis.conf。以下是一些常用的配置选项:

  • 绑定地址

    修改 bind 指令来指定 Redis 监听的 IP 地址,默认绑定到 127.0.0.1,仅本地访问。若需允许远程访问,可以修改为服务器的实际 IP 或注释掉该行以监听所有接口。

    bash 复制代码
    bind 0.0.0.0
  • 设置密码

    在配置文件中找到 # requirepass foobared,取消注释并设置密码:

    复制代码
    requirepass yourpassword
  • 持久化配置

    • RDB 持久化

      复制代码
      save 900 1
      save 300 10
      save 60 10000

      上述配置表示在指定时间内有相应数量的写操作时,自动保存数据快照。

    • AOF 持久化

      bash 复制代码
      appendonly yes
      appendfsync everysec

      启用 AOF 持久化,并设置每秒同步一次。

  • 内存限制

    设置 Redis 使用的最大内存量,防止占用过多系统内存。

    复制代码
    maxmemory 256mb
    maxmemory-policy allkeys-lru

    上述配置表示最大使用 256MB 内存,并采用 LRU 策略淘汰数据。

修改配置文件后,需要重启 Redis 服务使配置生效:

Redis 的优缺点

优点

  • 高性能:内存存储和高效的命令处理使其具备极高的读写速度。
  • 丰富的数据结构:支持多种数据类型,满足不同应用场景的需求。
  • 灵活的持久化方式:提供 RDB 和 AOF 两种持久化机制,兼顾性能和数据安全。
  • 高可用性:通过主从复制、哨兵和集群模式,确保系统的高可用性和扩展性。
  • 简单易用:命令简洁明了,易于学习和使用。

缺点

  • 数据持久化带来的性能开销:虽然提供了持久化机制,但在高频率写入时可能会影响性能。
  • 内存限制:由于数据存储在内存中,数据量受限于服务器的内存容量,成本较高。
  • 不适合复杂查询:Redis 主要用于键值存储,复杂的查询和关系操作不如传统关系型数据库强大。
  • 单线程模型:虽然高性能,但在单个实例上无法充分利用多核 CPU 的能力(不过可以通过集群模式来扩展)。

Redis 以其高性能、丰富的数据结构和灵活的应用方式,成为现代应用架构中不可或缺的组成部分。无论是作为缓存、消息队列,还是实时分析和分布式锁,Redis 都能提供高效的解决方案。然而,在使用时也需要考虑其内存消耗和持久化带来的性能开销,结合具体业务场景进行合理选型和优化。

2. 字符串(String)操作

字符串是 Redis 最基本的数据类型,可以存储文本、数字或二进制数据。

常用命令

  • SET key value:设置键的值。
  • GET key:获取键的值。
  • INCR key:将键的整数值加 1。
  • DECR key:将键的整数值减 1。
  • APPEND key value:在键的现有值后追加内容。
  • STRLEN key:获取键值的长度。
sql 复制代码
SET name "Alice"
GET name          # 输出: "Alice"

INCR counter      # 返回 1(假设初始值为0)
INCR counter      # 返回 2
GET counter       # 输出: "2"

APPEND name " Smith"
GET name          # 输出: "Alice Smith"

STRLEN name       # 输出: 11

3. 哈希(Hash)操作

哈希用于存储对象的属性,适合存储具有多个字段的数据。

常用命令

  • HSET key field value:设置哈希中字段的值。
  • HGET key field:获取哈希中指定字段的值。
  • HMSET key field1 value1 [field2 value2 ...] :批量设置哈希字段的值(已弃用,建议使用 HSET)。
  • HMGET key field1 [field2 ...] :批量获取哈希字段的值。
  • HGETALL key:获取哈希中所有字段和值。
  • HDEL key field [field ...] :删除哈希中的一个或多个字段。
sql 复制代码
HSET user:1 name "Bob" age 25 email "bob@example.com"
HGET user:1 name    # 输出: "Bob"

HMSET user:2 name "Charlie" age 30 email "charlie@example.com"
HMGET user:2 name age  # 输出: ["Charlie", "30"]

HGETALL user:1
# 输出:
# 1) "name"
# 2) "Bob"
# 3) "age"
# 4) "25"
# 5) "email"
# 6) "bob@example.com"

HDEL user:1 email
HGETALL user:1
# 输出:
# 1) "name"
# 2) "Bob"
# 3) "age"
# 4) "25"

4. 列表(List)操作

列表是有序的字符串集合,支持在两端进行高效的插入和删除操作。

常用命令

  • LPUSH key value [value ...] :在列表左侧插入一个或多个值。
  • RPUSH key value [value ...] :在列表右侧插入一个或多个值。
  • LPOP key:移除并获取列表左侧的第一个值。
  • RPOP key:移除并获取列表右侧的第一个值。
  • LRANGE key start stop:获取列表中指定范围的值。
  • LLEN key:获取列表的长度。
  • LREM key count value:移除列表中指定数量的值。
shell 复制代码
LPUSH tasks "task1"
RPUSH tasks "task2"
LPUSH tasks "task0"
LRANGE tasks 0 -1
# 输出:
# 1) "task0"
# 2) "task1"
# 3) "task2"

LPOP tasks
# 输出: "task0"
LRANGE tasks 0 -1
# 输出:
# 1) "task1"
# 2) "task2"

LLEN tasks    # 输出: 2

LREM tasks 1 "task1"
LRANGE tasks 0 -1
# 输出:
# 1) "task2"

5. 集合(Set)操作

集合是无序且不重复的字符串集合,支持高效的集合运算。

常用命令

  • SADD key member [member ...] :向集合中添加一个或多个成员。
  • SREM key member [member ...] :从集合中移除一个或多个成员。
  • SMEMBERS key:获取集合中的所有成员。
  • SISMEMBER key member:判断成员是否存在于集合中。
  • SCARD key:获取集合的成员数量。
  • SUNION key [key ...] :获取多个集合的并集。
  • SINTER key [key ...] :获取多个集合的交集。
  • SDIFF key [key ...] :获取多个集合的差集。
bash 复制代码
SADD fruits "apple"
SADD fruits "banana" "cherry"
SMEMBERS fruits
# 输出:
# 1) "apple"
# 2) "banana"
# 3) "cherry"

SISMEMBER fruits "banana"    # 输出: 1 (存在)
SISMEMBER fruits "grape"     # 输出: 0 (不存在)

SCARD fruits    # 输出: 3

SADD other_fruits "banana" "dragonfruit"
SUNION fruits other_fruits
# 输出:
# 1) "apple"
# 2) "banana"
# 3) "cherry"
# 4) "dragonfruit"

SINTER fruits other_fruits
# 输出:
# 1) "banana"

SDIFF fruits other_fruits
# 输出:
# 1) "apple"
# 2) "cherry"

6. 有序集合(Sorted Set)操作

有序集合是带有分数(score)的集合,成员按分数有序排列。

常用命令

  • ZADD key score member [score member ...] :向有序集合中添加一个或多个成员,或更新已有成员的分数。
  • ZREM key member [member ...] :移除有序集合中的一个或多个成员。
  • ZRANGE key start stop [WITHSCORES] :按分数从小到大获取成员。
  • ZRANGEBYSCORE key min max [WITHSCORES] :按分数范围获取成员。
  • ZREVRANGE key start stop [WITHSCORES] :按分数从大到小获取成员。
  • ZCARD key:获取有序集合的成员数量。
  • ZSCORE key member:获取成员的分数。
shell 复制代码
ZADD leaderboard 100 user1
ZADD leaderboard 200 user2
ZADD leaderboard 150 user3
ZRANGE leaderboard 0 -1 WITHSCORES
# 输出:
# 1) "user1"
# 2) "100"
# 3) "user3"
# 4) "150"
# 5) "user2"
# 6) "200"

ZREVRANGE leaderboard 0 -1 WITHSCORES
# 输出:
# 1) "user2"
# 2) "200"
# 3) "user3"
# 4) "150"
# 5) "user1"
# 6) "100"

ZRANGEBYSCORE leaderboard 100 150 WITHSCORES
# 输出:
# 1) "user1"
# 2) "100"
# 3) "user3"
# 4) "150"

ZREM leaderboard user1
ZRANGE leaderboard 0 -1 WITHSCORES
# 输出:
# 1) "user3"
# 2) "150"
# 3) "user2"
# 4) "200"

ZCARD leaderboard    # 输出: 2
ZSCORE leaderboard user2    # 输出: "200"

7. 键管理操作

管理 Redis 中的键,包括查看、删除、设置过期时间等。

常用命令

  • KEYS pattern:查找所有符合模式的键(不推荐在生产环境中使用,因性能问题)。
  • SCAN cursor [MATCH pattern] [COUNT count] :迭代查找符合模式的键。
  • DEL key [key ...] :删除一个或多个键。
  • EXISTS key [key ...] :检查一个或多个键是否存在。
  • EXPIRE key seconds:设置键的过期时间(秒)。
  • TTL key:获取键的剩余生存时间。
sql 复制代码
SET temp "temporary"
EXPIRE temp 60
TTL temp    # 输出: 60(剩余60秒)

SET user:3 name "Dave"
EXISTS user:3    # 输出: 1 (存在)

KEYS user:*      # 输出: ["user:3"] (注意:不推荐在生产环境使用)

SCAN 0 MATCH user:*
# 输出:
# 1) "0"
# 2) 1) "user:3"

DEL temp
EXISTS temp    # 输出: 0 (不存在)

8 连接与管理操作

管理 Redis 连接和服务器配置。

常用命令

  • CONFIG GET parameter:获取服务器配置参数。
  • CONFIG SET parameter value:设置服务器配置参数。
  • FLUSHALL:清空所有数据库中的所有键(慎用)。
  • FLUSHDB:清空当前数据库中的所有键(慎用)。
  • SELECT index:选择数据库(0-15,默认是0)。
shell 复制代码
CONFIG GET maxmemory
# 输出:
# 1) "maxmemory"
# 2) "0" (表示无限制)

CONFIG SET maxmemory 256mb

FLUSHDB    # 清空当前数据库

持久化操作

控制 Redis 的持久化行为。

常用命令

  • SAVE:同步保存数据到磁盘(阻塞)。
  • BGSAVE:异步保存数据到磁盘(非阻塞)。
  • LASTSAVE:返回最近一次成功将数据保存到磁盘的时间戳。
bash 复制代码
SAVE    # 同步保存,可能会阻塞其他操作
BGSAVE  # 异步保存,立即返回
LASTSAVE    # 输出最近一次保存的时间戳

相关推荐
Warren987 分钟前
Spring Boot 整合网易163邮箱发送邮件实现找回密码功能
数据库·vue.js·spring boot·redis·后端·python·spring
HyggeBest31 分钟前
Golang 并发原语 Sync Pool
后端·go
来杯咖啡1 小时前
使用 Go 语言别在反向优化 MD5
后端·go
小花鱼20256 小时前
redis在Spring中应用相关
redis·spring
似水流年流不尽思念6 小时前
Redis 分布式锁和 Zookeeper 进行比对的优缺点?
redis·后端
郭京京6 小时前
go操作redis
redis·后端·go
Warren989 小时前
Spring Boot 拦截器返回中文乱码的解决方案(附全局优化思路)
java·网络·spring boot·redis·后端·junit·lua
XXD啊9 小时前
Redis 从入门到实践:Python操作指南与核心概念解析
数据库·redis·python
你的人类朋友18 小时前
说说你对go的认识
后端·云原生·go