当前位置: 首页 > news >正文

Redis配置与数据类型详解及缓存优化实践

        Redis(Remote Dictionary Server,远程字典服务)是一个开源的高性能键值存储数据库,广泛应用于缓存、消息队列、排行榜等多种场景。本文将详细介绍Redis的配置文件、数据类型操作以及如何使用Redis缓存MySQL数据,并探讨缓存优化的常见问题及解决方案。

一、Redis配置文件

(一)配置文件概述

        Redis的配置文件通常命名为redis.conf,它包含了Redis服务器的各种配置选项。通过修改配置文件,可以调整Redis的行为以满足不同的需求。

(二)配置文件操作

1. 获取配置

config get *:获取所有配置项。

config get requirepass:获取当前的密码配置。

2. 设置配置

修改配置文件:直接编辑redis.conf文件,这种方式的修改是永久生效的。

客户端修改:使用config set命令,例如config set requirepass 456789。这种方式的修改仅在当前服务器运行期间有效,重启服务器后会恢复为配置文件中的设置。

(三)配置文件示例

# 导入其他配置文件
include other_redis.conf# 端口号
port 6379# 只能通过指定IP访问Redis服务
bind 127.0.0.1# 客户端未操作断开时间(秒)
timeout 0# 日志级别
loglevel notice# 日志文件路径
logfile ""# 默认数据库数量
database 16# 保存数据到磁盘的规则
save 900 1
save 300 10
save 60 10000# 数据文件名称
dbfilename dump.rdb# 数据文件路径
dir ./# 配置密码
requirepass foobared# 最大连接数
maxclients 10000

二、Redis数据类型及操作

(一)键的操作

delete(keys):删除键。

expire(key, time):给键添加有效期。

exists(key):检查键是否存在。

ttl(key):获取键的存活时间。

type(key):返回键的类型。

keys(*):展示所有匹配的键。

(二)字符串

get(key):获取指定键的值。

mget([key1, key2, ...]):批量获取键的值。

set(key, value):设置键的值。

mset({key1: value1, key2: value2, ...}):批量设置键值对。

setex(key, time, value):设置键的值并指定过期时间(单位为秒)。

incr(key):自增键的值。

incrby(key, amount):增加键的值指定的数量。

decrby(key, amount):减少键的值指定的数量。

strlen(key):获取键值的长度。

(三)列表

lpush(key, value1, value2, ...):从左边插入元素。

rpush(key, value1, value2, ...):从右边插入元素。

lpop(key):移除并返回列表左侧的第一个元素。

rpop(key):移除并返回列表右侧的第一个元素。

llen(key):返回列表的元素个数。

lrange(key, start, stop):返回指定索引范围内的所有元素。

lindex(key, index):返回指定索引对应的元素。

ltrim(key, start, stop):截取列表范围内的数据。

(四)哈希

hset(key, field, value):为哈希表中的字段设置值。

hmset(key, {field1: value1, field2: value2, ...}):批量设置哈希表中的字段值。

hget(key, field):获取哈希表中指定字段的值。

hmget(key, field1, field2, ...):批量获取哈希表中指定字段的值。

hdel(key, field1, field2, ...):删除哈希表中的一个或多个字段。

hkeys(key):获取哈希表中所有字段名。

hlen(key):返回哈希表中键值对的个数。

hexists(key, field):检查哈希表中是否存在指定字段。

(五)集合

smembers(key):获取集合中所有元素。

sadd(key, value1, value2, ...):向集合中添加一个或多个元素。

sismember(key, value):检查集合中是否存在指定元素。

scard(key):获取集合中元素的个数。

srem(key, value1, value2, ...):从集合中删除一个或多个元素。

sinter(key1, key2, ...):计算多个集合的交集。

sunion(key1, key2, ...):计算多个集合的并集。

sdiff(key1, key2, ...):计算多个集合的差集。

(六)有序集合

zadd(key, {value1: score1, value2: score2, ...}):向有序集合中添加一个或多个元素。

zrem(key, value1, value2, ...):从有序集合中删除一个或多个元素。

zrange(key, start, stop):根据排序返回指定范围内的所有元素。

zcard(key):统计有序集合中元素的个数。

zcount(key, min, max):统计指定分值范围内的元素个数。

zrank(key, value):返回元素在有序集合中的排名。

三、Redis主从复制

Redis支持主从复制功能,可以通过以下配置实现:

slaveof <masterip> <masterport>:指定主服务器的IP和端口。

masterauth:如果主服务器设置了密码,需要在此处指定。

四、使用Redis缓存MySQL数据

(一)缓存优势

        Redis的内存操作效率远远高于磁盘操作,因此使用Redis缓存MySQL数据可以显著提高系统的读取性能。

(二)缓存问题及解决方案

1. 缓存雪崩

        缓存雪崩是指在某一时刻,大量缓存数据同时过期失效,导致大量请求直接请求MySQL数据库,从而给数据库带来巨大压力,甚至可能导致数据库崩溃。

解决方案

        设置随机的过期时间,避免大量缓存同时失效。

2. 缓存穿透

        缓存穿透是指查询MySQL数据库中不存在的数据,此时缓存中也不会有,导致大量请求直接请求MySQL数据库。

解决方案

        当查询MySQL中数据不存在时,在Redis中缓存一个空对象,避免后续的重复查询。

http://www.dtcms.com/a/347080.html

相关文章:

  • 使用VLLM部署大模型embedding/chat 的API
  • 秋招面试准备
  • Git的下载安装和使用以及和IDEA的关联
  • PLECS 中使用 C-Script 来模拟 NTC 热敏电阻(如 NTC3950B)
  • Spring Boot 校验分组(Validation Groups)高级用法全指南
  • 从词源和输出生成等角度详细解析PHP中常用文件操作类函数
  • Mac简单测试硬盘读写速度
  • 计算机网络 TLS握手中三个随机数详解
  • 鸿蒙应用网络开发实战:HTTP、WebSocket、文件下载与网络检测全攻略
  • Ubuntu 操作系统深度解析:从入门到精通(2025 最新版)
  • AP5414 LED驱动芯片:高效灵活,专业级照明解决方案
  • 20250823解决荣品RD-RK3588-MID核心板的底板的adb不通
  • Unity其他--【MMD】如何在Unity中制作MMD
  • Go数据结构与算法-常见的排序算法
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘arviz’问题
  • Boost.Asio 库中的 async_read_some用法
  • JAVA核心基础篇-操作符
  • 嵌入式LINUX——————网络TCP
  • 如何在Ubuntu中删除或修改已有的IP地址设置?
  • 在Excel和WPS表格中快速插入多行或多列
  • 生成一个竖直放置的div,宽度是350px,上面是标题固定高度50px,下面是自适应高度的div,且有滚动条
  • LeetCode算法日记 - Day 19:判定字符是否唯一、丢失的数字
  • 可转换债券高频交易Level-2五档Tick级分钟历史数据分析
  • 什么?OpenCV调用cv2.putText()乱码?寻找支持中文的方法之旅
  • Vue3+ElementPlus倒计时示例
  • 入校申请|基于SprinBoot+vue的入校申报审批系统(源码+数据库+文档)
  • [激光原理与应用-332]:结构设计 - Solidworks - 特征(Feature)是构成三维模型的基本单元,是设计意图的载体,也是参数化设计的核心。
  • LeetCode 面试经典 150_数组/字符串_找出字符串中第一个匹配项的下标(23_28_C++_简单)(KMP 算法)
  • 「ECG信号处理——(24)基于ECG和EEG信号的多模态融合疲劳分析」2025年8月23日
  • 构建真正自动化知识工作的AI代理