Redis配置与优化

发布时间:2023年12月18日

Redis是一种开源的、基于内存的非关系型数据库管理系统(DBMS),全称为Remote Dictionary Server(远程字典服务)。以下是关于Redis的一些详细说明:

特点和优势:

  1. 数据存储方式: Redis将数据存储在内存中,这使得它具有快速的读写速度。它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。

  2. 高性能: Redis以高性能著称,每秒能够处理超过10万次的读写操作。这使得它成为缓存、消息中间件等场景的理想选择。

  3. 持久化: Redis支持数据的持久化,可以将数据保存到磁盘上,以便在重启后仍然保持数据。

  4. 多语言支持: Redis提供了多种语言的API,使得开发者可以使用自己熟悉的编程语言与Redis进行交互。

  5. 支持事务: Redis支持事务,开发者可以将一系列命令作为一个事务来执行,保证这些命令的原子性。

  6. 分布式锁: 由于其快速的读写速度和支持事务的特性,Redis经常被用来实现分布式锁,用于在分布式系统中确保资源的互斥访问。

  7. LUA脚本: Redis支持使用LUA脚本进行扩展,这使得开发者可以在Redis中执行自定义的操作。

  8. LRU驱动事件: Redis使用LRU(Least Recently Used)算法来管理内存,保证内存中存储的数据是最近被访问的。

  9. 多种集群方案: Redis提供了多种集群方案,可以实现高可用性和横向扩展。

Redis之所以能够达到如此高的性能,主要归功于以下几个关键因素:

  1. 基于内存的存储: Redis将数据存储在内存中,相比传统的磁盘存储系统,内存读写速度更快。由于内存的高速访问特性,Redis能够提供非常低延迟的数据访问。

  2. 单线程模型: Redis采用单线程模型,即每个Redis实例都在单个线程上运行。虽然这听起来似乎是一个性能瓶颈,但通过避免多线程带来的线程同步和锁的开销,Redis实现了简单而高效的设计。单线程模型避免了多线程之间的竞争和上下文切换的开销,有助于提高整体性能。

  3. 非阻塞的I/O操作: Redis使用非阻塞的I/O操作,通过使用异步I/O和事件驱动机制,充分利用了操作系统提供的异步特性,降低了I/O操作的开销,提高了并发处理能力。

  4. 优化的数据结构: Redis提供了多种灵活的数据结构,如字符串、哈希表、列表等,这些数据结构的实现经过了优化,能够在常见的操作上达到极高的性能。

  5. 数据分片和集群: Redis支持数据分片和集群模式,允许将数据分布在多个节点上,实现水平扩展。这使得Redis能够处理更大量级的数据和更高的并发请求。

  6. 持久化策略: Redis支持多种持久化策略,包括快照(snapshot)和追加式文件(append-only file)。这些策略允许在需要时将数据写入磁盘,以保障数据的持久性,同时通过合理配置可以平衡性能和数据安全性。

  7. 精简的功能集: Redis专注于提供高效的键值存储和相关操作,避免了其他一些复杂的关系型数据库所需的功能。这种专注使得Redis能够更好地优化核心功能,提高性能。

总体来说,Redis之所以如此快速,是因为它在设计和实现上注重了简单、高效、专注的原则,并充分利用了内存、单线程、异步I/O等特性。这些因素使得Redis成为一个高性能的缓存、数据存储和消息中间件系统。

数据结构:

Redis支持多种数据结构,包括但不限于:

  1. 字符串(Strings): 存储文本或二进制数据。

  2. 哈希表(Hashes): 用于存储键值对的集合。

  3. 列表(Lists): 有序的字符串元素集合。

  4. 集合(Sets): 无序且不重复的字符串元素集合。

  5. 有序集合(Sorted Sets): 有序的集合,每个元素关联一个分数,通过分数排序。

应用场景:

  1. 缓存: 作为缓存数据库,提高访问速度。

  2. 消息中间件: 用作消息队列,实现异步通信。

  3. 计数器: 适用于统计、计数操作。

  4. 实时分析: 存储实时数据,支持实时分析和查询。

  5. 会话存储: 用于存储用户会话信息,如登录状态。

  6. 分布式锁: 通过Redis的事务特性实现分布式锁。

安装部署及启动

#关闭安全机制和防火墙
systemctl stop firewalld
setenforce 0

#下载依赖
yum install -y gcc gcc-c++ make

#解压安装
tar zxvf redis-5.0.7.tar.gz -C /opt/

cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install
##由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。

#执行软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
#这里一直回车直到遇到下面这行配置
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server 
#要一次性完整正确的修改为:/usr/local/redis/bin/redis-server

执行 ./install_server.sh 通常会触发 Redis 安装脚本,该脚本用于将 Redis 进程服务化,使其能够以服务的形式在系统中运行。这个脚本通常包含了一系列配置步骤,以确保 Redis 在系统启动时能够自动启动,并提供一些管理功能,比如启动、停止、重启等。

具体来说,执行 ./install_server.sh 可能会执行以下操作:

  1. 询问安装路径: 脚本可能会询问你希望将 Redis 安装到哪个路径。你需要输入一个有效的路径,并确保有足够的权限在该路径下进行安装。

  2. 设置配置文件: 脚本可能会创建或修改 Redis 的配置文件,通常是 redis.conf。这个配置文件包含了 Redis 的各种参数设置,如端口号、数据存储路径等。

  3. 创建启动脚本: 脚本可能会在 /etc/init.d/ 目录下创建一个启动脚本,以便通过系统服务管理工具进行 Redis 的启动、停止和重启操作。

  4. 设置开机启动: 脚本可能会配置系统,使得 Redis 在系统启动时自动启动。

  5. 生成相关文件: 脚本可能会生成一些必要的文件,如 PID 文件(记录 Redis 进程的进程号)等。

Selected config: Port : 6379 #默认侦听端口为6379

Config file : /etc/redis/6379.conf #配置文件路径

Log file : /var/log/redis_6379.log #日志文件路径

Data dir : /var/lib/redis/6379 #数据文件路径

Executable : /usr/local/redis/bin/redis-server #可执行文件路径

Cli Executable : /usr/local/bin/redis-cli #客户端命令工具

#把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
ln -s /usr/local/redis/bin/* /usr/local/bin/

#当 install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认监听端口为 6379
netstat -natp | grep redis

#Redis 服务控制
/etc/init.d/redis_6379 stop                #停止
/etc/init.d/redis_6379 start            #启动
/etc/init.d/redis_6379 restart            #重启
/etc/init.d/redis_6379 status            #状态

#修改配置 /etc/redis/6379.conf 参数
vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.41.11                #70行,添加 监听的主机地址
port 6379                                    #93行,Redis默认的监听端口
daemonize yes                                #137行,启用守护进程
pidfile /var/run/redis_6379.pid                #159行,指定 PID 文件
loglevel notice                                #167行,日志级别
logfile /var/log/redis_6379.log                #172行,指定日志文件

#重启
/etc/init.d/redis_6379 restart

redis命令行工具

Redis 提供了丰富的命令行工具,用于管理和与 Redis 数据库进行交互。以下是一些常用的 Redis 命令行工具:

  1. redis-server:
  • 用于启动 Redis 服务器的工具。可以通过指定配置文件等方式启动,例如:redis-server /path/to/redis.conf
  1. redis-cli:
  • Redis 客户端命令行工具,用于与 Redis 服务器进行交互。可以执行各种 Redis 命令,例如:

    redis-cli
    
  1. redis-benchmark:
  • 用于进行性能测试和基准测试的工具。可以模拟多个并发客户端执行指定数量的操作,评估 Redis 服务器的性能。例如:

    redis-benchmark -h host -p port -n requests -c clients
    
  1. redis-check-aof:
  • 用于修复和检查 AOF(Append-Only File) 持久化文件的工具。例如:
redis-check-aof /path/to/appendonly.aof
  1. redis-check-rdb:
  • 用于修复和检查 RDB(Redis DataBase) 持久化文件的工具。例如:

    redis-check-rdb /path/to/dump.rdb
    

这些命令工具通常在安装 Redis 后自动可用。可以通过在命令行中运行这些命令来执行各种操作,如与 Redis 服务器进行交互、测试性能、检查和修复持久化文件等。

redis-cli 命令行工具

redis-cli 是 Redis 提供的命令行工具,用于与 Redis 服务器进行交互。你可以使用 redis-cli 来执行各种 Redis 命令,查询数据、修改配置以及进行其他管理操作。以下是一些基本的用法和示例:

基本用法:

  1. 启动 redis-cli:
redis-cli

如果 Redis 服务器运行在默认地址和端口(127.0.0.1:6379),可以直接运行以上命令连接到 Redis 服务器。

  1. 指定服务器地址和端口:
redis-cli -h host -p port

用于连接到指定主机和端口的 Redis 服务器。替换 hostport 为实际的主机和端口信息。

redis-cli -h host -p port -a password
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库

示例操作:

以下是一些 redis-cli 的基本操作示例:

  1. 设置键值对:
set mykey "Hello, Redis!"
  1. 获取键的值:
get mykey
  1. 列出所有键:
keys *
  1. 删除键:
del mykey
  1. 查看服务器信息:
info
  1. 执行 Redis 脚本:
eval "return 'Hello, Redis!'" 0
  1. 退出 redis-cli:
exit

以上只是一些简单的示例,实际上,redis-cli 支持 Redis 的所有命令。你可以在命令行中输入 help 来查看帮助信息,或者使用 --help 参数获取更详细的使用说明。例如:

redis-cli --help

这将列出 redis-cli 的各种参数和选项,帮助你更好地使用这个命令行工具。

redis-benchmark 测试工具

redis-benchmark 是 Redis 提供的性能测试工具,用于模拟多个并发客户端对 Redis 服务器执行指定数量的操作,以评估 Redis 的性能和吞吐量。以下是一些常用的 redis-benchmark 命令的示例和解释:

示例用法:

  1. 基本测试:
redis-benchmark -h host -p port -t operation -n requests -c clients
  • -h: 指定 Redis 服务器的主机。

  • -p: 指定 Redis 服务器的端口。

  • -t: 指定操作类型,例如 getset 等。

  • -n: 指定总请求数。

  • -c: 指定并发客户端数。

  • -s :指定服务器 socket

  • -d:以字节的形式指定 SET/GET 值的数据大小。

  • -k:1=keep alive 0=reconnect

  • -r:SET/GET/INCR 使用随机 key, SADD 使用随机值。

  • -P :通过管道传输请求。

  • -q :强制退出 redis。仅显示 query/sec 值。

  • --csv :以 CSV 格式输出。

  • -l :生成循环,永久执行测试。

  • -t :仅运行以逗号分隔的测试命令列表。

  • -I :Idle 模式。仅打开 N 个 idle 连接并等待。

    示例:

redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -n 100000 -c 50
  1. 使用管道(pipelining):
redis-benchmark -h host -p port -t operation -n requests -c clients --pipeline length
  • --pipeline: 启用指定长度的管道,以提高性能。

    示例:

redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -n 100000 -c 50 --pipeline 10
  1. 打印每次请求的延迟(latency):
redis-benchmark -h host -p port -t operation -n requests -c clients --csv
  • --csv: 以 CSV 格式输出每次请求的延迟信息。

    示例:

redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -n 100000 -c 50 --csv
#向 IP 地址为 192.168.10.23、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 192.168.10.23 -p 6379 -c 100 -n 100000

#测试存取大小为 100 字节的数据包的性能
redis-benchmark -h 192.168.10.161 -p 6379 -q -d 100

#测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能
redis-benchmark -t set,lpush -n 100000 -q

解释:

  • 总请求数 (-n): 指定要执行的总请求数,用于测试 Redis 服务器在一定负载下的性能。

  • 并发客户端数 (-c): 指定并发运行的客户端数,表示同时有多少个客户端连接到 Redis 服务器。

  • 管道长度 (--pipeline): 启用管道技术,将多个请求打包发送给服务器,以提高性能。该参数指定管道中的请求数量。

  • 延迟信息 (--csv): 以 CSV 格式输出每次请求的延迟信息,包括最小、最大和平均延迟。

通过调整这些参数,你可以模拟不同负载条件下的性能测试,并了解 Redis 在各种情况下的性能表现。请确保在进行性能测试之前仔细阅读 redis-benchmark 的文档以了解更多选项和详细信息。


redis数据库基本命令

Redis是一种内存数据库,支持键值对存储。以下是一些基本的Redis操作语句:

设置键值对(Set):

SET key value

示例:

SET username john_doe

获取键的值(Get):

GET key

示例:

GET username

删除键值对(Delete):

DEL key

示例:

DEL username

检查键是否存在(Exists):

EXISTS key

示例:

EXISTS username

设置键的过期时间(Expire):

EXPIRE key seconds

示例:

EXPIRE username 3600

这会使username键在3600秒(1小时)后过期。

查看键的剩余过期时间(TTL):

TTL key

示例:

TTL username

返回值为负表示键没有设置过期时间,返回-1表示键不存在,否则返回键的剩余过期时间(以秒为单位)。

查看所有键(Keys):

KEYS pattern

示例:

KEYS *

返回所有键的列表。请注意,生产环境中避免在大型数据库上使用KEYS *,因为它可能会阻塞服务器。

127.0.0.1:6379> KEYS *                #查看当前数据库中所有键

127.0.0.1:6379> KEYS v*                #查看当前数据库中以 v 开头的数据

127.0.0.1:6379> KEYS v?                #查看当前数据库中以 v 开头后面包含任意一位的数据

127.0.0.1:6379> KEYS v??                #查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据

查看value类型(type)

TYPE key

其中,key 是你要查看的键名。例如:

SET mykey "Hello"
TYPE mykey

上述命令的输出将是:

string

这表示 mykey 的值是字符串类型。以下是一些可能的返回值:

  • string:字符串类型

  • list:列表类型

  • set:集合类型

  • zset:有序集合类型

  • hash:哈希表类型

  • none:键不存在

对已有key重命名(rename)

RENAME oldkey newkey

其中,oldkey 是要被重命名的旧键名,newkey 是新的键名。例如:

SET mykey "Hello"
RENAME mykey newkey

这会将 mykey 重命名为 newkey。你也可以将键重命名为现有的键名,此时原始键名会被新的键名覆盖。如果新的键名已经存在,则它会被覆盖,因为 RENAME 命令将删除已有的同名键。

请确保在执行重命名操作时小心谨慎,以避免意外删除数据或覆盖现有键。

renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名。(不覆盖)

命令格式:renamenx 源key 目标key

可以通过组合使用 EXISTSRENAME 命令来实现类似的功能,以确保新键名不存在才进行重命名。

以下是一个示例:

# 检查新键名是否已经存在
EXISTS newkey

# 如果新键名不存在,则执行重命名操作
RENAME oldkey newkey

这样的操作可以在两个命令中间加上一些逻辑,确保只有在新键名不存在时才执行重命名操作。这是因为 RENAME 命令会覆盖已存在的键,可能导致数据丢失。

获取当前数据库中键的数量(DBSIZE)

DBSIZE 是一个用于获取当前数据库中键的数量的命令。它返回一个整数,表示当前数据库中的键的数量。以下是 DBSIZE 命令的使用示例:

DBSIZE

这将返回一个整数,表示当前数据库中的键的数量。

示例:

SET key1 "value1"
SET key2 "value2"
DBSIZE

在这个例子中,执行 DBSIZE 命令后,如果数据库中有两个键,它将返回值为 2

请注意,DBSIZE 命令的时间复杂度为 O(1),因此无论数据库中有多少键,它都会在常量时间内返回结果。

设置密码和查看密码

配置文件

  1. 设置密码:

    在 Redis 配置文件中(通常是 redis.conf),找到并编辑以下行:

# requirepass foobared

将其中的 foobared 替换为你想要设置的密码。例如:

requirepass your_password

保存配置文件并重新启动 Redis 服务,使密码设置生效。

  1. 查看密码:

    你可以通过以下方式查看 Redis 是否设置了密码:

  • 打开 Redis 配置文件,查找 requirepass 配置项,查看其后的密码。

  • 连接到 Redis 服务器,并使用 CONFIG GET requirepass 命令:

    CONFIG GET requirepass
    

????????如果密码已设置,它将返回密码的散列值。如果密码未设置,将返回 nil

  1. 使用密码连接到 Redis:

    在使用客户端连接到 Redis 时,你需要提供密码:

redis-cli -h your_redis_host -p your_redis_port -a your_password

其中,your_redis_host 是 Redis 服务器的主机地址,your_redis_port 是 Redis 服务器的端口号,your_password 是你设置的密码。

命令行

使用config set requirepass yourpassword命令设置密码

127.0.0.1:6379> config set requirepass 123456

使用config get requirepass命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)

127.0.0.1:6379> auth 123456
#使用密码 123456 进行身份验证。如果密码正确,Redis 将返回 OK,表示身份验证成功。
127.0.0.1:6379> config get requirepass
#获取当前Redis 实例的密码配置。如果 Redis 设置了密码,它会返回一个包含密码散列值的数组。如果 Redis 没有设置密码,它会返回一个只包含 nil 的数组。

redis多库命令

SELECT命令:

  • 语法:SELECT <index>,其中<index>是数据库的编号。

  • 示例:SELECT 1,表示切换到数据库1。

> SELECT 1
OK

?

move命令:

MOVE命令用于将指定键从当前数据库移动到另一个数据库。这个命令的语法如下:

MOVE <key> <db>

其中:

  • <key> 是要移动的键名。

  • <db> 是要移动到的目标数据库编号。

示例:

假设有一个键名为 mykey 存储在当前数据库(默认数据库 0)中,我们要将它移动到数据库 1:

> SET mykey "Hello, Redis!"
OK

> MOVE mykey 1
(integer) 1

在上面的例子中,如果移动成功,MOVE命令会返回整数值 1;如果键不存在或者无法移动,返回整数值 0。

需要注意的是,如果目标数据库中已经存在同名的键,则 MOVE 操作不会进行,仍然会返回 0。

请确保使用该命令时键名和数据库编号都是正确的,以避免意外的数据操作。

DBSIZE命令:

  • 用于获取当前数据库的key数量。

  • 语法:DBSIZE

> DBSIZE
(integer) 42

FLUSHDB和FLUSHALL命令:

  • FLUSHDB用于清空当前数据库的所有数据。

  • FLUSHALL用于清空所有数据库的所有数据。

> FLUSHDB
OK

一定小心使用

INFO命令:

  • 获取Redis服务器的信息,包括每个数据库的统计信息。
> INFO

这些命令可以帮助你管理和操作不同的Redis数据库。记住,不同的数据库是相互独立的,切换数据库不会影响其他数据库的数据。

文章来源:https://blog.csdn.net/qq_51545656/article/details/135045541
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。