Redis:入门(二)

1. 使用Redis实现常见应用场景

1.1 缓存

场景描述:

假设有一个电子商务网站,商品信息在数据库中查询比较耗时,为提高性能,希望将商品信息缓存起来,减少对数据库的访问。

实现方式:

// Java代码示例,使用Spring Data Redis
// 存储商品信息到缓存,设置过期时间为10分钟
redisTemplate.opsForValue().set("product:123", getProductInfoFromDB(), Duration.ofMinutes(10));

在上述例子中,将商品ID为123的商品信息存储在Redis缓存中,有效期为10分钟。在实际应用中,可以通过缓存中是否存在商品信息来判断是否需要访问数据库。

1.2 计数器

场景描述:

在一个社交应用中,需要统计用户的粉丝数量,以及每条动态的点赞次数。

实现方式:

// Java代码示例,使用Spring Data Redis
// 增加用户粉丝数量计数器
redisTemplate.opsForValue().increment("user:123:followers", 1);
// 增加动态点赞次数计数器
redisTemplate.opsForValue().increment("post:456:likes", 1);

在上述例子中,通过使用Redis的INCR命令实现了用户粉丝数量和动态点赞次数的计数功能。

1.3 分布式锁

场景描述:

在一个分布式系统中,有多个服务节点需要操作共享资源,为避免并发问题,需要引入分布式锁。

实现方式:

// Java代码示例,使用Spring Data Redis
// 尝试获取分布式锁
Boolean lockAcquired = redisTemplate.opsForValue().setIfAbsent("resource:lock", "locked", Duration.ofSeconds(10));
if (lockAcquired != null && lockAcquired) {try {// 执行业务操作// ...} finally {// 释放锁redisTemplate.delete("resource:lock");}
}

在上述例子中,使用Redis的SETNX命令(在Spring Data Redis中对应setIfAbsent方法)尝试获取分布式锁,如果获取成功,则执行业务操作,最后释放锁。

1.4 会话存储

场景描述:

在一个Web应用中,用户登录后的会话信息需要进行存储,以便在用户多次请求中保持登录状态。

实现方式:

// Java代码示例,使用Spring Data Redis
// 存储用户会话信息
Map<String, String> userSession = new HashMap<>();
userSession.put("userId", "123");
userSession.put("username", "john_doe");
redisTemplate.opsForHash().putAll("session:123", userSession);
// 设置过期时间为30分钟
redisTemplate.expire("session:123", Duration.ofMinutes(30));

在上述例子中,使用Redis的哈希数据类型存储用户会话信息,并设置了30分钟的过期时间。这样可以确保用户的登录状态在30分钟内保持有效。

以上是具体场景下使用Redis实现的简单示例,实际应用中需根据业务需求和具体场景进行更详细的设计和实现。

2. 与Spring Boot集成

2.1 使用Spring Data Redis

Spring Data Redis是Spring提供的用于简化Redis操作的数据访问框架,通过它可以更方便地与Redis进行交互。

依赖添加:

<!-- Maven 依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置文件:

# application.yaml
spring:redis:host: localhostport: 6379password: your_password

使用示例:

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;@Service
public class MyRedisService {private final RedisTemplate<String, String> redisTemplate;public MyRedisService(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}public void setValue(String key, String value) {redisTemplate.opsForValue().set(key, value);}public String getValue(String key) {return redisTemplate.opsForValue().get(key);}
}
2.2 RedisTemplate的使用

Spring Data Redis提供了RedisTemplate类,它是一个通用的Redis访问模板,提供了丰富的操作方法。

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;@Service
public class MyRedisService {private final RedisTemplate<String, String> redisTemplate;public MyRedisService(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}public void setValue(String key, String value) {redisTemplate.opsForValue().set(key, value);}public String getValue(String key) {return redisTemplate.opsForValue().get(key);}
}

上述示例中,通过opsForValue()方法获取操作字符串的接口,实现了对Redis中字符串类型数据的存储和获取。

2.3 注解方式的操作

Spring Data Redis支持通过注解的方式进行Redis操作,可以更加简洁地实现一些常见的操作。

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;@Service
public class MyRedisService {private final RedisTemplate<String, String> redisTemplate;public MyRedisService(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}public void setValue(String key, String value) {ValueOperations<String, String> valueOps = redisTemplate.opsForValue();valueOps.set(key, value);}public String getValue(String key) {ValueOperations<String, String> valueOps = redisTemplate.opsForValue();return valueOps.get(key);}
}

在上述示例中,通过@Service注解声明一个Spring Bean,并通过@Autowired注解注入RedisTemplate实例。然后通过opsForValue()获取字符串操作接口,进行相应的操作。
Spring Boot与Redis的整合变得简单而高效,开发者可以通过Spring Data Redis提供的模板和注解方式轻松地完成与Redis的交互。

3. 监控和调试

3.1 监控Redis服务器状态

Redis提供了多种方式来监控服务器的状态,其中一种常用的方式是通过INFO命令获取服务器信息。

# 在Redis-cli中执行
INFO

上述命令将返回包含大量信息的字符串,包括服务器的各种统计信息、配置参数等。通过解析这些信息,可以了解服务器的运行状态、内存使用情况、客户端连接数等。

3.2 Redis的日志

Redis的日志文件位于配置文件中指定的logfile路径,默认为redis-server.log。通过查看日志文件,可以了解服务器的运行状态、警告信息和错误信息。

# 查看日志文件内容
cat /path/to/redis-server.log

在实际应用中,可以根据需要调整日志级别和记录方式,以便更精细地监控和调试。

3.3 使用Redis-cli进行调试

Redis提供了命令行工具redis-cli,通过该工具可以直接与Redis服务器进行交互,进行调试和执行命令。

# 连接到本地Redis服务器
redis-cli

redis-cli中,可以执行各种Redis命令,例如查看键值、设置配置参数、执行Lua脚本等。

以上是一些简单的监控和调试方式,实际情况下可以根据需要使用更专业的监控工具和调试工具,例如Redis的官方监控工具RedisInsight,以及一些第三方的监控平台。这些工具能够提供更直观、全面的监控信息,并支持更多的调试功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

electron + vue3 + typescript + monorepo + github releas 桌面开发脚手架 , 快速初始化新建项目

github: https://github.com/enncy/electron-quickly-start 安装 下载/初始化项目模版 npm create eqs-clilatest init运行 # 安装 pnpm npm i pnpm -g # 安装依赖 pnpm i打开两个终端分别启动 vue 和 electron npm run dev:webnpm run dev:app打包 npm run build发布 n…

重装Windows系统出现Windows无法安装到这个磁盘,选中的磁盘采用GPT分区

文章目录 1.问题描述2.问题解决 1.问题描述 重装Windows系统时&#xff0c;出现Windows无法安装到这个磁盘&#xff0c;选中的磁盘采用GPT分区这个提示 2.问题解决 1.shiftF10&#xff0c;打开命令行 2.输入&#xff1a;diskpart (打开分区工具) 3.输入&#xff1a;list di…

elementplus Dialog 对话框设置距离页面顶部的距离

默认为 15vh&#xff0c;当弹窗过于高的时候&#xff0c;这个距离其实是不合适的 <el-dialogv-model"dialogVisible"title"Tips"width"30%":before-close"handleClose"top"6vh"><span>This is a message</s…

IDEA搭建JDK源码学习环境(可添加注释、修改、debug)

工程详见&#xff1a;https://github.com/wenpanwenpan/study-source-jdk1.8.0_281 1、找到src.zip和javafx-src.zip 找到你想要调试的JDK&#xff0c;笔者本地电脑上装了两个版本的JDK&#xff0c;这里以jdk1.8.0_281为例将JDK目录下的javafx-src.zip和src.zip两个压缩包进行…

MySQL45讲 -- MYSQL中的锁

根据加锁的范围&#xff0c;MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类 全局锁 使用FTWRL命令 该锁让整个库处于只读状态的时候&#xff0c;可以使用这个命令&#xff0c;之后数据库的更新事务会被阻塞 使用场景&#xff1a;全库逻辑备份 FTWRL与readOnly的区别 如果…

详解SpringCloud微服务技术栈:ElasticSearch实践2——RestClient查询并处理文档

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;ElasticSearch搜索结果处理&#xff08;排序、分页、高亮&#xff09; &#x1f4da;订…

VMware 虚拟机环境下的ubuntu 上安装mysql,并能远程访问数据库

需求&#xff1a;为了实现在linux上模拟服务器跑代码&#xff0c;并存储在mysql上&#xff0c;通过远程可视化mysql数据库软件查看linux上mysql数据库数据的实时动态。 1. 虚拟机和ubuntu的安装 这里我选择的是VMware workstation-v14, ubuntu-18.04.1。至于体流程网上很多&a…

VUE中一些概念的理解

Vue 中 computed、mounted 和 methods 的基本理解。 computed 计算属性 (computed)&#xff1a;主要用于根据现有的响应式数据&#xff08;即 data 中的数据或其他 computed 属性&#xff09;进行计算并返回一个新的值。计算属性是基于它们的响应式依赖进行缓存的。只有当依赖…

vite项目配置本地开发使用https访问,3分钟搞定

在开发过程中&#xff0c;有时候需要用到一些音视频接口等需要https才能拿到权限&#xff0c;为方便开发过程中调试&#xff0c;这里就介绍几种vite项目快速开启https访问的方式。vite配置项说明文档&#xff1a;开发服务器选项 | Vite 官方中文文档 第一种&#xff1a;使用插件…

api管理工具的新发现

一、之前用过的api管理工具 关于api管理工具&#xff0c;之前用过yapi和postman&#xff0c;但是后来发现了这两个工具 二、新发现的更强大的&#xff1a;Apifox和Eolink Apifox和Eolink&#xff0c;那这两个工具有什么优势呢&#xff1f; 2.1Apifox 其中 Apifox Postman …

Xlua分析:Lua调用C#

在之前的博客Lua与C#交互初析-CSDN博客中讲了有关lua和c#交互的比较浅层的概念&#xff0c;即C#侧注册[LuaCallCSharp]和[CSharpCallLua]的标签后&#xff0c;即可实现双侧沟通。但是还是没有讲明白里面的一些具体内容包括参数传递、xlua栈调用&#xff0c;甚至是C#如何调用lua…

SpringBoot引入 liteflow 规则引擎,yyds!

1前言 在日常的开发过程中&#xff0c;经常会遇到一些串行或者并行的业务流程问题&#xff0c;而业务之间不必存在相关性。 在这样的场景下&#xff0c;使用策略和模板模式的结合可以很好的解决这个问题&#xff0c;但是使用编码的方式会使得文件太多,在业务的部分环节可以这…

R语言【taxlist】——levels():获取或设置分类等级列表

Package taxlist version 0.2.4 Description 分类层次结构可以设置为 taxlist 对象中的级别&#xff0c;按从低到高的顺序排列。 在 taxlist 对象中为特定分类概念添加分类级别。此外&#xff0c;概念限制的变化可能涉及其分类层次结构的变化。 Usage levels(x)## S3 method…

五、C#与数据库交互(数据绑定与数据视图控件)

在C#中&#xff0c;与数据库进行交互是常见的任务&#xff0c;尤其是在.NET环境中。你可以使用ADO.NET&#xff0c;Entity Framework或Dapper等框架来实现与数据库的交互。以下是一个简单的例子&#xff0c;展示如何使用ADO.NET来从数据库中获取数据并绑定到Windows Forms应用程…

python基础3

7.5 range range 可以生成数字供 for 循环遍历 , 它可以传递三个参数&#xff0c;分别表示 起始、结束和步长。 8. 数据类型高级 8.1 字符串高级 字符串的常见操作包括&#xff1a; 获取长度 :len len 函数可以获取字符串的长度。 查找内容 :find 查找指定内容在字符…

Compose | UI组件(五) | Button 按钮组件

文章目录 前言Button 是什么&#xff1f;Button的创建Button显示水平方向的UI IconButton是什么&#xff1f;IconButton是创建 FloatingActionButton是什么&#xff1f;FloatingActionButton创建 ExtendedFloatingActionButton是什么&#xff1f; 总结 前言 随着移动端的技术不…

java—AWT

AWT 课程&#xff1a;1、GUI编程简介_哔哩哔哩_bilibili 一.介绍 包含了很多类和接口&#xff01;GUI&#xff01;元素&#xff1a;窗口、按钮、文本框java.awt 二.窗口 1.构造 2.方法 // 实例化frame类Frame frame new Frame("这个一个框");// 设置可见性frame.…

Metaphor(EXA) 基于大语言模型的搜索引擎

文章目录 关于 Metaphor使用示例 关于 Metaphor Metaphor是基于大语言模型的搜索引擎&#xff0c;允许用户使用完整的句子和自然语言搜索&#xff0c;还可以模拟人们在互联网上分享和谈论链接的方式进行查询内容。 Metaphor同时还能与LLMs结合使用&#xff0c;允许LLMs连接互联…

帧头不对齐的频段间载波聚合(interCA-NonAlignedFrame)

提升上下行吞吐量是3GPP演进的重要方向之一&#xff0c;其中&#xff0c;载波聚合是提升吞吐量最有效的手段之一。在3GPP R16中&#xff0c;帧头不对齐的频段间载波聚合被提出&#xff0c;可以进一步提升上行吞吐量。 帧头对齐的频段间载波聚合 帧头对其的频段间载波聚合&…

第十三届蓝桥杯省赛C/C++,JAVA,Python研究生组题 质因数个数

4658. 质因数个数 - AcWing题库 给定正整数 n&#xff0c;请问有多少个质数是 n 的约数。 输入格式 输入的第一行包含一个整数 n。 输出格式 输出一个整数&#xff0c;表示 n 的质数约数个数。 数据范围 对于 30%30% 的评测用例&#xff0c;1≤n≤10000 对于 60%60% 的评测用例…