Redis 整合 Jedis SpringBoot

2023-11-18

1-Redis 整合 Jedis

1.1-Jedis 环境准备

A、Jedis 的 Jar 包:

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

B、连接 Redis 注意:

  • 禁用 CentOS 7 防火墙:执行命令systemctl stop firewalld.servicesystemctl disable firewalld.service
  • redis.conf 中注释bind 127.0.0.1
  • redis.conf 中修改protected-mode no

C、创建 Jedis 工程:
在这里插入图片描述
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.learn</groupId>
    <artifactId>jedis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.3.0</version>
        </dependency>
    </dependencies>
</project>

D、创建包 com.learn.redis.jedis、类 JedisApiTest

package com.learn.redis.jedis;

import redis.clients.jedis.Jedis;

public class JedisApiTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.31.80", 6379);
        String pong = jedis.ping();
        System.out.println("连接成功");
        jedis.close();
    }
}

1.2-Jedis 常用操作

1.2.1-Jedis Api Key

Jedis jedis = new Jedis("192.168.31.80", 6379);
jedis.set("k1", "v1");
jedis.set("k2", "v2");
jedis.set("k3", "v3");
Set<String> keys = jedis.keys("*");
System.out.println(keys.size());
for (String key : keys) {
    System.out.println(key);
}
System.out.println(jedis.exists("k1"));
System.out.println(jedis.ttl("k1"));
System.out.println(jedis.get("k1"));
jedis.close();

1.2.2-Jedis Api String

Jedis jedis = new Jedis("192.168.31.80", 6379);
jedis.mset("str1", "v1", "str2", "v2", "str3", "v3");
System.out.println(jedis.mget("str1", "str2", "str3"));
jedis.close();

1.2.3-Jedis Api List

Jedis jedis = new Jedis("192.168.31.80", 6379);
jedis.lpush("mylist", "a", "b", "c");
List<String> list = jedis.lrange("mylist", 0, -1);
for (String element : list) {
    System.out.println(element);
}
jedis.close();

1.2.4-Jedis Api Set

Jedis jedis = new Jedis("192.168.31.80", 6379);
jedis.sadd("orders", "order01");
jedis.sadd("orders", "order02");
jedis.sadd("orders", "order03");
jedis.sadd("orders", "order04");
Set<String> smembers = jedis.smembers("orders");
for (String order : smembers) {
    System.out.println(order);
}
jedis.srem("orders", "order02");
jedis.close();

1.2.5-Jedis Api Hash

Jedis jedis = new Jedis("192.168.31.80", 6379);
jedis.hset("hash1", "userName", "lisi");
System.out.println(jedis.hget("hash1", "userName"));
Map<String, String> map = new HashMap<String, String>();
map.put("telphone", "13810169999");
map.put("address", "atguigu");
map.put("email", "abc@163.com");
jedis.hmset("hash2", map);
List<String> result = jedis.hmget("hash2", "telphone", "email");
for (String element : result) {
    System.out.println(element);
}
jedis.close();

1.2.6-Jedis Api Zset

Jedis jedis = new Jedis("192.168.31.80", 6379);
jedis.zadd("zset01", 100d, "z3");
jedis.zadd("zset01", 90d, "l4");
jedis.zadd("zset01", 80d, "w5");
jedis.zadd("zset01", 70d, "z6");
Set<String> zrange = jedis.zrange("zset01", 0, -1);
for (String e : zrange) {
    System.out.println(e);
}
jedis.close();

1.3-Jedis 实例

1.3.1-手机验证码

功能要求:

  • 输入手机号,点击发送后随机生成 6 位数字码,2 分钟有效。
  • 输入验证码,点击验证,返回成功或失败。
  • 每个手机号每天只能输入 3 次。

在这里插入图片描述


2-Redis 整合 SpringBoot

SpringBoot 整合 Redis 非常简单,只需按如下步骤整合即可:

A、创建 SpringBoot 工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B、pom.xml 中引入 Redis 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.2</version>
        <relativePath/>
    </parent>

    <groupId>com.learn.redis</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot</name>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- SpringBoot 2.X 集成 Redis -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.12.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.11.4</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

C、application.properties 添加 Redis 配置

# Redis 服务器地址
spring.redis.host=192.168.31.80
# Redis 服务器端口
spring.redis.port=6379
# Redis 数据库索引(默认为 0)
spring.redis.database=0
# 连接超时时间(毫秒)
spring.redis.timeout=1800000
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
# 最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0

D、创建包 com.learn.redis.springboot.config,类 RedisConfig

package com.learn.redis.springboot.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;

@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        // Key 序列化方式
        template.setKeySerializer(redisSerializer);
        // Value 序列化方式
        template.setValueSerializer(jackson2JsonRedisSerializer);
        // Value HashMap 序列化方式
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        // 解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解决乱码的问题),过期时间 600 秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}

E、创建包 com.learn.redis.springboot.controller,类 RedisTestController

package com.learn.redis.springboot.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/redis/test")
public class RedisTestController {
    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping
    public String testRedis() {
        // Redis 设置值
        redisTemplate.opsForValue().set("name", "lucy");
        // Redis 获取值
        String name = (String) redisTemplate.opsForValue().get("name");
        return name;
    }
}

F、测试


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 整合 Jedis SpringBoot 的相关文章

随机推荐

  • 函数式组件与类组件有何不同?

    与React类组件相比 React函数式组件究竟有何不同 在过去一段时间里 典型的回答是类组件提供了更多的特性 比如state 当有了Hooks后 答案就不再是这样了 或许你曾听过它们中的某一个在性能上的表现优于另一个 那是哪一个 很多此类
  • MultipartFile实现文件上传和下载(Springboot)

    MultipartFile是SpringMVC提供简化上传操作的工具类 在不使用框架之前 都是使用原生的HttpServletRequest来接收上传的数据 文件是以二进制流传递到后端的 然后需要我们自己转换为File类 使用了Multip
  • 计算机专业选修课怎么选比较好,大一选修课选什么好 大学选修课推荐

    大学之于高中最大的不同点除了越来越多的自由时间以外 大学有各种各样的选修课供我们选择 在专业课之余 还可以选择其他自己感兴趣的学科进行学习 同时也能给自己增加一项技能 大学热门选修课 1 职场礼仪 礼仪是永远不会过时的 它是一个人的修养素质
  • 语法6:raise - 触发异常

    目录 1 基础格式 2 raise 单独语句 3 raise class 4 raise instance 5 raise from 6 try raise 实现循环跳出
  • JDK的命令行工具——修改中

    目录 一 jps 虚拟机进程状况工具 二 jstat 虚拟机统计信息监视工具 三 jinfo java配置信息工具 四 jmap java内存映像工具 五 jhat 虚拟机堆转储快照分析工具 仅做了解即可 六 jstack java堆栈跟踪
  • 以太坊私有网络的设置与体验

    记录一下搭建一个以太坊私有网络环境的过程 方便以后的开发 我这里采用的是Geth客户端 在geth ethereum org网站上有详细的文档介绍 这里主要是按照官网的教程来操作 安装 我是Ubuntu的环境 执行以下命令来安装 sudo
  • 使用hydra进行FTP认证破解

    hydra入门 hydra是什么 hydra的安装 hydra的基本使用 熟悉常见协议 HTTP协议 FTP协议 SSH协议 Telnet协议 熟悉hydra的参数 基本参数 高级参数 使用方法 使用hydra进行HTTP认证破解 HTTP
  • 搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例

    通信协议 串口通信详解 IIC通信详解 SPI通信详解 CAN通信详解 文章目录 通信协议 什么是串口 串口分类 USART UART RS232 RS485的区别 串口协议原理 传输协议 需要定义的参数 发送函数USART SendDat
  • Java是一门什么语言?

    个人理解 Java代码需要先编译成class 然后交给JVM执行 而JVM在执行class代码时是解释执行的 所以Java不是一门单纯的编译型或解释型语言 它是一门混合型语言 它是集编译型语言和解释型语言的优势于一身 即执行速度较快 只需编
  • 微调(fine-tuning)

    微调 fine tuing 是一种迁移学习 transfer learning 方法 在迁移学习过程中 预训练的模型的权重会根据新数据进行训练和调整
  • Python工程师面试必备25条知识点

    1 到底什么是Python 你可以在回答中与其他技术进行对比 Python是一种解释型语言 与C语言和C的衍生语言不同 Python代码在运行之前不需要编译 其他解释型语言还包括PHP和Ruby Python是动态类型语言 指的是你在声明变
  • Vue实现高德地图信息窗

  • 操作系统——读者写者问题(写者优先)

    阅读前提醒 本文代码为伪代码 仅供理解 马上就要被关得精神失常了 也许这是我的最后一条博客了吧 啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈水文来咯 1 什么是读者写者问题 一个数据文件或记录可被多个进程共享
  • 当pytest遇上poium会擦出什么火花 ?

    首先 创建一个test sample test demo py 文件 写入下面三行代码 def test bing page page get https www bing com assert page get title 必应 不要问题
  • 栈和队列-P79-9

    队列的最大容量为MaxSize 这句话并不是说该队列存满时的元素个数为MaxSize 这一种情况是最大容量为MaxSize 没有申请其他数据成员 判断队列满的条件是Q front Q rear 1 MaxSize 解释 通俗的解释 Q re
  • 强化学习:带起始探索的每次访问同策回合更新算法求解机器人找金币问题

    1 问题描述 2 环境建模 3 游戏环境类roadenv 设计 class roadenv def init self epsilon 0 5 gamma 0 8 状态空间 动作空间 self states 1 2 3 4 5 6 7 8
  • Python 线程池 ThreadPoolExecutor

    线程池 以前我们定义多线程任务的时候都是通过循环来控制线程数量 很不优雅 import threading class MyThread threading Thread def init self threadID name counte
  • 如何比较PixelCNN与DCGAN两种Image generation方法?

    今天组会读了一下deepmind的PixelCNN nips的那篇 不是很明白到底为什么follow的work这么多 而且pixel rnn还拿了best paper award 感觉pixel by pixel生成是一种非常反直觉的生成方
  • png格式解码库移植过程详解

    1 zlib库和png库的源码获取 1 zlib库源码下载网址 http www zlib net 2 libpng库源码下载网址 ftp ftp simplesystems org pub libpng png src libpng16
  • Redis 整合 Jedis SpringBoot

    1 Redis 整合 Jedis 1 1 Jedis 环境准备 A Jedis 的 Jar 包