SSM 如何使用 Redis 实现缓存?

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

皮卡丘CSRF

1.CSRF&#xff08;get&#xff09; 首先看提示&#xff0c;我们选择用户kobe&#xff0c;密码123456登录 点击修改个人信息&#xff0c;假如用户要把住址改为shanxi 再点击submit&#xff0c;同时用bp抓包&#xff0c;我们可以看到是get请求&#xff0c;数据包含在URL之中 将…

NCI架构-1

1、NFCC和DH通过物理连线相连&#xff0c;物理连线对应为Transport Layer&#xff08;传输层&#xff09;&#xff0c;支持SPI、I2C、UART、USB等&#xff1b; 2、DH中所有和NFC相关的应用程序都可视为DH-NFCEE(EE:Execution Enviroment)&#xff0c;图左的NFCEE模块可运行一些…

Jetson nano之ROS入门 - - 机器人建模与仿真

文章目录 前言一、URDF建模1. URDF语法详解a. robotb. linkc. joint 2. URDF机器人建模实操 二、Xacro宏优化1、 Xacro宏语法详解2、 Xacro建模实操 三、Rviz与Gazebo仿真1、Gazebo集成URDF建模语法基础2、Gazebo集成URDF实操 总结 前言 在ROS中&#xff0c;机器人建模和仿真是…

Android AIDL Callback的使用(配源码)

零、示例说明 本示例&#xff0c;完成的功能是&#xff1a;客户端向服务端注册一个回调&#xff0c;服务端是一个商店shop&#xff0c;当商店里的产品 Product 有变化时&#xff0c;调用回调向通知客户端&#xff0c;什么商品更新了。 一、完整源代码 完整源码链接: https:/…

solr快速上手:配置从mysql同步数据(五)

0. 引言 上一节我们已经配置了新的索引&#xff0c;但是数据还是手动添加的&#xff0c;并没有实现自动从数据库同步&#xff0c;所以这一节&#xff0c;继续来实现从mysql同步数据到solr solr快速上手&#xff1a;solr简介及安装&#xff08;一&#xff09; solr快速上手&a…

[java安全]反射

文章目录 [java安全]反射定义反射的运用1、反射获取类对象1.1、Class.forName()1.2、Object.class1.3、obj.getClass() 2、反射获取成员方法2.1、getMethods()2.2、getDeclaredMethods()2.3、getMethod()2.4、getDeclaredMethod() 3、反射获取构造方法4、反射创建对象4.1、通过…

自动化测试selenium环境搭建

自动化测试工具selenium搭建 1. 自动化和selenium基本概念 1) 什么是自动化?为什么要做自动化&#xff1f; 自动化测试能够代替一部分的手工测试&#xff0c;自动化测试能够提高测试的效率。随着项目功能的增加&#xff0c;版本越来越多&#xff0c;版本的回归测试的压力也…

MySQL架构简介

MySQL是系统架构中最常见的中间件&#xff0c;主要由Server层&#xff08;连接器Connectors、连接池Connection Pool、查询缓存query cache、分析器Parser、优化器Optimizer、执行器、binlog&#xff09;以及存储引擎层组成。 MySQL架构简介 连接器 与客户端建立连接、认证身…

论文笔记:Graph neural networks: A review of methods and applications

1 GNN的设计pipeline 1.1 获取图结构 结构化场景 图结构在应用问题中是已知的 比如分子结构、物理系统非结构化场景 图结构在应用问题中是未知的 需要根据任务人为地建图 1.2 判断图的类型 & 尺寸 图的类型 有向图/无向图//异构图/同构图 图中的点和边类型是不是一样的…

LearnOpenGL-高级OpenGL-8.高级GLSL

本人初学者&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 文章目录 高级GLSLGLSL的内建变量在顶点着色器的内建变量gl_PointSizegl_VertexID 在片段着色器的内建变量gl_FragCoordgl_FrontFacinggl_FragDepth 接口块Uniform缓冲对象Uniform块布局使用Uniform缓冲简…

基于QT的智能家居中控系统的简明设计

文章目录 系统总体说明主板UI设计后续改进与完善 系统总体说明 系统采用 “主从式架构” &#xff0c;即一主多从式&#xff0c;该智能居家控制系统的主要功能包括登录功能、注册功能、音乐播放功能、时间显示、日历显示、温度湿度光照气压海拔数据等环境指标数据显示等。   …

Linux之理解文件系统——文件的管理

文章目录 前言一、磁盘1.磁盘的物理结构2.磁盘的存储结构3.磁盘的逻辑结构 二、文件系统与inode1.文件在磁盘中是如何存储的&#xff1f;2.对文件进行操作 三、软硬链接1.软链接创建软链接&#xff1a;inode删除软链接&#xff1a;软链接的作用&#xff1a; 2.硬链接创建硬链接…

堆(堆排序 模拟堆)

目录 一、堆的数据结构二、堆的操作方法往下调整的示意图往上调整的示意图相关功能的实现思路1.插入一个数2.求最小值3.删除最小值4.删除任意一个元素5.修改任意一个元素 三、堆的实战运用堆排序模拟堆 一、堆的数据结构 堆是一个完全二叉树&#xff1a;除了最后一层结点以外&…

3ds MAX 基本体建模,长方体、圆柱体和球体

3ds MAX基本页面如下&#xff1a; 生成新的几何体在右侧&#xff1a; 选择生成的对象类型即可&#xff0c;以下为例子&#xff1a; 1、长方体建模 选择建立的对象类型为长方形 在 任意一个窗口绘制&#xff0c;鼠标滑动 这里选择左上角的俯视图 松开鼠标后&#xff0c;可以…

第18章 JQuery DataTables初始化渲染显示与排序

1 System.Linq.AsyncIEnumerableExtensions (Data\Extensions\AsyncIEnumerableExtensions.cs) namespace System.Linq { /// <summary> /// 【异步枚举数扩展--类】 /// <remarks> /// 摘要&#xff1a; /// 该类通过对System.Linq.Async中方法的自定义扩展…

C++进阶 —— set

目录 一&#xff0c;set介绍 二&#xff0c;set使用 一&#xff0c;set介绍 set是按照特定次序存储元素的关联式容器&#xff0c;元素不可重复&#xff1b;set中的元素不能在容器中修改(元素总是const)&#xff0c;但是可从容器中插入和删除它们&#xff1b;set中的元素总是按…

【测试报告】个人博客系统自动化测试报告

文章目录 项目背景项目功能测试计划功能测试测试用例执行测试的操作步骤 自动化测试设计的模块、自动化运行的结果、问题定位的结果自动化测试优点 项目背景 对于一个程序员来说&#xff0c;定期整理总结并写博客是不可或缺的步骤&#xff0c;不管是对近期新掌握的技术或者是遇…

代码随想录算法训练营第五十三天 | 力扣 1143.最长公共子序列, 1035.不相交的线, 53. 最大子序和

1143.最长公共子序列 题目 1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符…

SpringBoot——原理(自动配置+原理分析-源码跟踪)

源码跟踪 从Springboot的启动类进入&#xff0c;进行分析. 源码跟踪技巧 在以后接触各种框架的时候&#xff0c;如果需要查看源码&#xff0c;需要找到关键点和核心流程&#xff0c;先在宏观对整个原理和流程有一个认识&#xff0c;之后再去了解其中的细节。 按住Ctrl左键进…

怎么实现常用网络接口自动化测试框架应用?

一、RESTful&#xff08;resource representational state transfer)类型接口测试 (一&#xff09;GUI界面测试工具&#xff1a;jmeter 1、添加线程组 2、添加http请求 3、为线程组添加察看结果树 4、写入接口参数并运行 5、在查看结果树窗口查看结果 6、多组数据可增加CSVDat…