SSM 如何使用 Redis 实现缓存?

news/2024/7/24 11:24:17 标签: redis, 缓存, java

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 数据库需要先创建连接池和连接。可以使用以下代码创建连接池和连接:

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

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

3. 操作 Redis 数据库

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

3.1 字符串操作

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

3.2 哈希操作

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

3.3 列表操作

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

3.4 集合操作

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

3.5 有序集合操作

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

4. 关闭连接

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

java">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 类,封装字符串、哈希、列表、集合和有序集合等操作。

java">@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 缓存用户信息:

java">@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.niftyadmin.cn/n/362705.html

相关文章

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

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

Spring Cloud Alibaba 完整使用及与各中间件集成

目录 前言 官方中文文档 使用版本 spring 中间件 使用到的组件与功能 环境安装 虚拟机 nexus nacos 集成过程 工程搭建 父工程搭建 子工程 服务集成 nacos集成 配置文件 服务注册与发现-discovery 服务注册 启动 服务发现 测试 配置管理-config 新增配…

【Netty】 工作原理详解(十一)

文章目录 前言一、Netty 模型二、代码示例2.1、引入Maven依赖2.2、服务端的管道处理器2.3、服务端主程序2.4、客户端管道处理器2.5、客户端主程序2.6、测试运行 总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设计&#xff08;二&…

外包实在是太坑了,干了三年,感觉人都废了

先说一下自己的情况&#xff0c;专科生&#xff0c;19年通过校招进入杭州某个外包软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

【Flutter 工程】005-代码分离实践:flutter_hooks functional_widget

【Flutter 工程】005-代码分离实践&#xff1a;flutter_hooks & functional_widget 文章目录 【Flutter 工程】005-代码分离实践&#xff1a;flutter_hooks & functional_widget一、概述1、Flutter “嵌套地狱”2、代码分离实践 二、实践1、安装 flutter_hooks & f…

docker idea直接部署到腾讯云镜像服务

首先创建一个Dockerfile 编写Dockerfile的信息 FROM java:8 MAINTAINER clarkshixxx.com RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai >/etc/timezone ENV ACTIVE"pre" ENV loggingpath"/zhibo/logs"…

手持式网络性能测试仪应用于哪些领域及可以完成什么工作?

首先明辰智航国产网络一点通有千兆和万兆以手持式网络性能测试仪&#xff0c;两款仪器可以应用于以下领域&#xff1a; 电信运营商&#xff1a;用于测试网络质量、信号强度、带宽、时延、丢包率等参数&#xff0c;以便优化网络性能和提高用户满意度。 企业网络管理&#xff1a…

使用压缩包安装jdk多版本并能灵活切换

使用压缩包安装jdk多版本并能领过切换 1.下载2.解压包到指定位置3.使用pdate-alternatives 进行版本切换管理3.1. jdk173.2. jdk1.8 3.切换版本4.解决JAVA_HOME环境变量识别的问题 1.下载 官网的下载地址&#xff1a; 下载地址&#xff1a; jdk17: jdk1.8在当前页面的下面: …