SSM 如何使用 Redis 实现缓存?

news2025/3/12 13:58:30

SSM 如何使用 Redis 实现缓存?

Redis 是一个高性能的非关系型数据库,它支持多种数据结构和多种操作,可以用于缓存、队列、计数器等场景。在 SSM(Spring + Spring MVC + MyBatis)开发中,Redis 可以用来实现数据缓存,提高系统的性能和可靠性。

本文将介绍如何使用 SSM 框架和 Redis 实现数据缓存,包括 Redis 的常用数据结构、Redis 的 Java 客户端 Jedis 的使用方法,以及如何在 SSM 中使用 Redis。

在这里插入图片描述

Redis 的常用数据结构

Redis 支持多种数据结构,包括字符串、哈希、列表、集合和有序集合等。下面简单介绍一下这些数据结构的特点和用途。

1. 字符串

字符串是 Redis 最基本的数据结构,它可以存储任意类型的数据,包括文本、二进制数据和数字等。字符串的最大长度为 512 MB。

字符串常用的操作包括设置值、获取值、追加值、自增自减等。例如,可以使用以下命令设置一个字符串值:

SET key value

其中,key 是字符串类型的键,value 是字符串类型的值。可以使用以下命令获取字符串值:

GET key

2. 哈希

哈希是一种键值对集合,它将多个键值对存储在一个键下。哈希常用于存储对象的属性,例如用户信息、商品信息等。

哈希常用的操作包括设置值、获取值、删除值等。例如,可以使用以下命令设置一个哈希值:

HSET key field value

其中,key 是字符串类型的键,field 是字符串类型的域,value 是字符串类型的值。可以使用以下命令获取哈希值:

HGET key field

3. 列表

列表是一种有序集合,它可以存储多个字符串类型的值。列表常用于存储队列、消息等。

列表常用的操作包括添加值、获取值、弹出值等。例如,可以使用以下命令添加一个列表值:

LPUSH key value

其中,key 是字符串类型的键,value 是字符串类型的值。可以使用以下命令获取列表值:

LRANGE key start stop

其中,startstop 分别是列表的起始位置和结束位置。

4. 集合

集合是一种无序集合,它可以存储多个字符串类型的值,且每个值都是唯一的。集合常用于存储标签、好友列表等。

集合常用的操作包括添加值、获取值、删除值等。例如,可以使用以下命令添加一个集合值:

SADD key member

其中,key 是字符串类型的键,member 是字符串类型的值。可以使用以下命令获取集合值:

SMEMBERS key

5. 有序集合

有序集合是一种有序集合,它可以存储多个字符串类型的值,每个值都有一个分数和一个排名。有序集合常用于存储排行榜、计数器等。

有序集合常用的操作包括添加值、获取值、删除值等。例如,可以使用以下命令添加一个有序集合值:

ZADD key score member

其中,key 是字符串类型的键,score 是有序集合值的分数,member 是字符串类型的值。可以使用以下命令获取有序集合值:

ZRANGE key start stop

其中,startstop 分别是有序集合的起始位置和结束位置。

Redis 的 Java 客户端 Jedis 的使用方法

Jedis 是一个 Redis 的 Java 客户端,它提供了丰富的 API,可以方便地操作 Redis 数据库。下面介绍一下 Jedis 的使用方法。

1. 引入依赖

首先需要在项目中引入 Jedis 的依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>

2. 创建连接池和连接

使用 Jedis 操作 Redis 数据库需要先创建连接池和连接。可以使用以下代码创建连接池和连接:

JedisPool jedisPool = new JedisPool("localhost", 6379);
Jedis jedis = jedisPool.getResource();

其中,localhost6379 分别是 Redis 数据库的地址和端口号。创建连接池和连接后,就可以使用 Jedis 操作 Redis 数据库了。

3. 操作 Redis 数据库

下面介绍一些常用的 Jedis 操作 Redis 数据库的方法。

3.1 字符串操作

  • 设置字符串值:
jedis.set("key", "value");
  • 获取字符串值:
String value = jedis.get("key");
  • 追加字符串值:
jedis.append("key", "value");
  • 自增自减:
jedis.incr("key");
jedis.decr("key");

3.2 哈希操作

  • 设置哈希值:
jedis.hset("key", "field", "value");
  • 获取哈希值:
String value = jedis.hget("key", "field");
  • 删除哈希值:
jedis.hdel("key", "field");

3.3 列表操作

  • 添加列表值:
jedis.lpush("key", "value");
  • 获取列表值:
List<String> values = jedis.lrange("key", 0,-1);
  • 弹出列表值:
String value = jedis.lpop("key");

3.4 集合操作

  • 添加集合值:
jedis.sadd("key", "value");
  • 获取集合值:
Set<String> values = jedis.smembers("key");
  • 删除集合值:
jedis.srem("key", "value");

3.5 有序集合操作

  • 添加有序集合值:
jedis.zadd("key", score, "member");
  • 获取有序集合值:
Set<String> values = jedis.zrange("key", start, stop);
  • 删除有序集合值:
jedis.zrem("key", "member");

4. 关闭连接

使用完 Jedis 后需要关闭连接:

jedis.close();
jedisPool.close();

在 SSM 中使用 Redis

下面介绍如何在 SSM 中使用 Redis 实现数据缓存。

1. 引入依赖

首先需要在项目中引入 Jedis 的依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>

2. 配置 Redis 连接池

在 Spring 的配置文件中配置 Redis 连接池:

<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
    <constructor-arg name="host" value="localhost" />
    <constructor-arg name="port" value="6379" />
</bean>

3. 封装 Redis 操作

为了方便在 SSM 中使用 Redis,可以封装一些常用的 Redis 操作。例如,可以创建一个 RedisService 类,封装字符串、哈希、列表、集合和有序集合等操作。

@Service
public class RedisService {

    @Autowired
    private JedisPool jedisPool;

    public void set(String key, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.set(key, value);
        }
    }

    public String get(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.get(key);
        }
    }
    public void hset(String key, String field, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.hset(key, field, value);
        }
    }

    public String hget(String key, String field) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.hget(key, field);
        }
    }

    public void lpush(String key, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.lpush(key, value);
        }
    }

    public List<String> lrange(String key, int start, int stop) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.lrange(key, start, stop);
        }
    }

    public void sadd(String key, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.sadd(key, value);
        }
    }

    public Set<String> smembers(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.smembers(key);
        }
    }

    public void zadd(String key, double score, String member) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.zadd(key, score, member);
        }
    }

    public Set<String> zrange(String key, int start, int stop) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.zrange(key, start, stop);
        }
    }

    public void delete(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.del(key);
        }
    }
   
  
}

4. 在 Service 中使用 Redis

在 Service 中可以注入 RedisService,使用 Redis 缓存数据。例如,可以在 UserService 中使用 Redis 缓存用户信息:

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    @Autowired
    private RedisService redisService;

    public User getUserById(int id) {
        String key = "user:" + id;
        String value = redisService.get(key);
        if (value != null) {
            return JSON.parseObject(value, User.class);
        }
        User user = userDao.getUserById(id);
        if (user != null) {
            redisService.set(key, JSON.toJSONString(user));
        }
        return user;
    }
}

在 getUserById 方法中,首先从 Redis 中获取用户信息。如果缓存中存在,就直接返回缓存中的用户信息;否则,从数据库中获取用户信息,并将用户信息保存到 Redis 中。这样就可以实现用户信息的缓存,提高系统的性能和可靠性。

总结

本文介绍了如何使用 SSM框架和 Redis 实现数据缓存。首先介绍了 Redis 的常用数据结构,包括字符串、哈希、列表、集合和有序集合等;然后介绍了 Redis 的 Java 客户端 Jedis 的使用方法,包括连接池和连接的创建、字符串、哈希、列表、集合和有序集合等操作;最后介绍了在 SSM 中使用 Redis 实现数据缓存的方法,包括依赖的引入、Redis 连接池的配置、Redis 操作的封装和在 Service 中使用 Redis 缓存数据。

使用 Redis 缓存数据可以提高系统的性能和可靠性,减少数据库的压力。但是需要注意的是,缓存数据的有效期和缓存数据的更新问题。在实际开发中需要根据具体的业务场景来确定缓存数据的有效期和更新策略。

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

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

相关文章

同一个Service类中非事务方法 调用 事务方法,事务失效 解决方法

同一个Service类中非事务方法 调用 事务方法&#xff0c;事务失效 解决方法 在平时开发中&#xff0c;同一个Service类中非事务方法调用事务方法&#xff0c;事务会失效&#xff0c;这里简单解释一下原因&#xff1a; spring采用动态代理机制来实现事务控制&#xff0c;而动态…

开发小程序流程

小程序的诞生&#xff0c;是继微信公众号之后的又一款火爆的 APP&#xff0c;并且小程序的市场需求也是非常大的。在小程序出现后&#xff0c;很多商家都想开发自己的小程序&#xff0c;但是因为不知道怎么开发&#xff0c;所以对此感到迷茫。下面就由爱尚网络科技来为大家介绍…

成功上岸奇安信!这份零基础入门网络安全的学习路线你一定要看,学长带你网络安全从入门到就业!

作为一个实用型技术博主&#xff0c;​由于我之前写了不少网络安全技术相关的文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人在后台问我&#xff1a; 现在转行学网络安全是一个正确的选择吗&#xff1f;我刚入门网络安全&#xff0c;该…

如何在华为OD机试中获得满分?Java实现【取出尽量少的球】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 某部门开展 Family Day …

震惊!吊打面试官,必备的 SpringCloud 微服务面试题(VIP典藏版)

目录 福利&#xff1a;文末有分享SpringBoot教程及源码哦《【imooc-java2021】体系课-Java工程师 》 Spring Cloud微服务面试题 1、Spring Cloud Netflix和Spring Cloud Alibaba包括哪些组件 2、Nacos是CP还是AP? 3、Nacos作为注册中心应该选择是CP还是AP&#xff1f; 4、…

ImageBind与Stable diffusion使用记录

参考代码 ImageBind&#xff1a;GitHub - facebookresearch/ImageBind: ImageBind One Embedding Space to Bind Them All ImageBind stable-diffusion-2-1-unclip&#xff1a;GitHub - Zeqiang-Lai/Anything2Image: Generate image from anything with ImageBind and Stabl…

条码控件Aspose Barcode,满足您条码需求的终极解决方案

Aspose.BarCode for .NET 是一个功能强大的API&#xff0c;可以从任意角度生成和识别多种图像类型的一维和二维条形码。开发人员可以轻松添加条形码生成和识别功能&#xff0c;以及在.NET应用程序中将生成的条形码导出为高质量的图像格式。 Aspose API 支持流行文件格式处理&a…

一文了解国内外电子后视镜(CMS)现行法规标准

摘要&#xff1a; 本文小编分享一篇整合了国内外对CMS的安装及功能性做出要求的相关标准与法规。感兴趣的朋友可以专门去搜索学习。 前言&#xff1a;随着GB15084-2022的即将正式实施&#xff0c;以摄像头屏幕组合取代传统光学后视镜的新一代电子后视镜CMS相关车型将被允许上路…

如何卸载Visio秘钥

文章目录 如何卸载Visio秘钥解决的问题我的环境版本查找OSPP.VBS文件使用命令行查看信息卸载Visio秘钥卸载其他版本秘钥查看word激活卸载Office秘钥总结 如何卸载Visio秘钥 解决的问题 本文教你如何卸载Visio或Office秘钥&#xff0c;如果安装了多个Visio无效秘钥&#xff0c…

【SpringBoot教程】开发提效工具Lombok引入 Mybatis-plus-generator代码自动生成工具

⛪ 专栏地址 系列教程更新中 &#x1f680; 文章介绍: 在开发过程中免不了与数据库的交互&#xff0c;其中模板类的编写如果手动编写会耗费大量时间&#xff0c;这里可引入MybatisPlus的Mybatis-plus-generator进行代码模板映射生成提高开发效率 &#x1f680; 源码获取: 项目中…

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题

现象: 正常运行没问题, 但是一旦用gdb来debug, 开场很快就进hardfault 分析: 进了hardfault时候观察调用栈 竟然是从定时器中断过来的 也就是定时器中断执行这条时候 再往前推, 是初始化systick时候 也就是说, 前一行把中断打开, 这一行打开定时器时钟, 马上进了一次中断…

淘宝图片搜索接口API封装

本篇博文介绍了对淘宝图片搜索API的二次封装&#xff0c;将URL参数封装成Python函数&#xff0c;直接传入参数即可获取搜索结果&#xff0c;例如淘宝商品标题、价格、销量和URL等。提供了详细的代码示例和接口调用Demo。 taobao.item_search_img-按图搜索淘宝商品&#xff08;拍…

hive 架构及 metastore 功能简单介绍

这两天在调研用 java 怎么能通过 hive metastore 将 hive 表中的数据读出来&#xff08;不能用 hive2&#xff09;&#xff0c;最好是能直接支持 sql 查询。各种查跟尝试&#xff0c;最终确定这条路走不通。期间研究了下 hive 的内部架构&#xff0c;其实就是看了一遍官方文档。…

企业微信也能接入ChatGPT啦~你也能成功,步骤超详细~

文章目录 配置企业微信创建企业创建应用 配置项目一、OpenAI账号注册二、克隆项目代码三、复制配置文件四、企业微信配置 服务器购买运行项目安装Python安装核心依赖启动项目 个人微信绑定 上次我把ChatGPT接入了微信&#xff08;请看这篇文章当ChatGpt接入微信群之后&#xff…

【王道·操作系统】第二章 进程管理【未完】

一、进程的基本概念 1.1 进程的概念 程序&#xff1a;静态的&#xff0c;存放在磁盘里的可执行文件&#xff0c;是一系列的指令集合进程Process&#xff1a;动态的&#xff0c;是程序的一次执行过程 1.2 进程的组成 数据结构PCB(process control block)&#xff0c;即进程控…

再谈sqlserver事务

事务没提交时&#xff0c;自增字段的数据已经生成 id 3&#xff0c; 此时 脏读数据 select with&#xff08;nolock&#xff09; 你获取的id是3 如果 rollback后 我重新提交插入数据&#xff0c;id3 的数据没了&#xff0c;变成了 4 因此&#xff0c;nolock允许脏的语句…

如何在华为OD机试中获得满分?Java实现【查找重复代码】一文详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 小陈负责维护项目中的代…

电子劳动合同如何签订才能生效呢?四步就能教会你!

根据人力资源社会保障部发布的《电子劳动合同订立指引》规定&#xff1a;用人单位与劳动者订立电子劳动合同的&#xff0c;要通过电子劳动合同订立平台订立。 电子劳动合同订立平台要通过有效的现代信息技术手段提供劳动合同订立、调取、储存、应用等服务&#xff0c;具备身份…

前端正确处理“文字溢出”的思路

目录 前言 一. 组件效果预览 二. 单行溢出的处理 三. 前期准备 四. 理清思路 五. 完成 autoEllipsis 函数 六. 保留后缀的实现 七. 源码 八. 优化点 前言 最近在项目中需要做到类似于 Mac 下这种&#xff0c;当屏幕宽度足以容下当前文件名称的时候&#xff0c;文件名称…

小心!认证中的这几个坑别再踩了

【小心&#xff01;认证中的这几个坑别再踩了】 1.三天拿证不可信&#xff01; 想要今天办理、明天拿证是不可能实现的。一个认证需要经过前期的材料准备、现场审核、提交报告、颁发证书这一整套流程&#xff0c;拿FSC认证来说&#xff0c;就算所有环节都顺利完成&#xff0c;也…