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    # 输出最近一次保存的时间戳

相关推荐
一氧化二氢.h3 小时前
通俗解释redis高级:redis持久化(RDB持久化、AOF持久化)、redis主从、redis哨兵、redis分片集群
redis·分布式·缓存
ouou061710 小时前
企业级NoSql数据库Redis集群
数据库·redis·nosql
刘媚-海外11 小时前
Go语言开发AI应用
开发语言·人工智能·golang·go
蒋星熠11 小时前
破壁者指南:内网穿透技术的深度解构与实战方法
网络·数据库·redis·python·websocket·网络协议·udp
躲在云朵里`14 小时前
Redis深度解析:核心数据结构、线程模型与高频面试题
数据结构·数据库·redis
恣艺15 小时前
Redis是什么?一篇讲透它的定位、特点与应用场景
数据库·redis·缓存
Aurora_NeAr15 小时前
Golang并发编程及其高级特性
后端·go
没有bug.的程序员16 小时前
Redis 内存优化与压缩:从原理到实战的完整指南
java·数据库·redis·内存优化·压缩内存
肃清116 小时前
《Redis核心机制解析》
数据库·redis·缓存
郭京京18 小时前
goweb模板语法html/template
后端·go