首页 > 数据库 >Java Boot 使用中间件 Redis 标准化流程

Java Boot 使用中间件 Redis 标准化流程

时间:2024-12-13 11:02:32浏览次数:6  
标签:Java String 中间件 Redis RedisTemplate key import public redisTemplate

一、Java Boot 使用中间件 Redis 标准化流程

注:写本文章的原因是项目中的redis使用不规范导致断开连接,重新连接也不行,稳定性不够

配置

1.在pom.xml添加
  <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
2.在application.properties配置
#redis
#地址
spring.data.redis.host=127.0.0.1
#端口
spring.data.redis.port=6379
#使用库
spring.data.redis.database=2
# 设置默认过期时间为30秒(30000毫秒)
spring.cache.redis.time-to-live=30000

注:代码也可以设置过期时间
案例 :保存 string 设置30S过期 redisTemplate.opsForValue().set(“text”, “value”,30, TimeUnit.SECONDS);

3.创建一个Java文件,用于初始化


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

@Configuration
public class RedisConfiguration {

    /*
     * 将数据序列化
     * 因为redis支持的数据类型很少
     * */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        // 将template 泛型设置为 <String, Object>
        RedisTemplate<String, Object> template = new RedisTemplate();
        // 连接工厂,不必修改
        template.setConnectionFactory(redisConnectionFactory);
        /*
         * 序列化设置
         */
        // key、hash的key 采用 String序列化方式
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // value、hash的value 采用 Jackson 序列化方式
        template.setValueSerializer(RedisSerializer.json());
        template.setHashValueSerializer(RedisSerializer.json());
        template.afterPropertiesSet();

        return template;
    }

}

配置结束

使用方法

代码案例 — 是我测试的一个接口Java类,测试性能和使用方法

package com.example.apidemo.login;

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

import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/txt")
public class TxtController {

    @Autowired
    RedisTemplate redisTemplate;

    public TxtController(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @RequestMapping("/inder3")
    public String getInder3() {

        for (int i = 0; i < 100000; i++) {
        //失效时间
            redisTemplate.opsForValue().set("" + i, i,30, TimeUnit.SECONDS);
        }

        return "001";
    }

    @RequestMapping("/inder4")
    public String getInder4() {
		//取出打印
        for (int i = 0; i < 50000; i++) {
            System.out.println( redisTemplate.opsForValue().get("" + i));
        }

        return "001";
    }
}

二 、其他案例–其他方法使用案例

提供的方法有很多可以存取不同类型的数据类型
redisTemplate.opsForList() List列表类型
redisTemplate.opsForSet() Set集合类型
redisTemplate.opsForZSet() Zet有序集合类型
redisTemplate.opsForHash() Hash哈希类型

以下是使用RedisTemplate操作不同Redis数据类型的代码示例:

1. 字符串(String)

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;

@Component
public class RedisStringOperations {

    private final RedisTemplate<String, String> redisTemplate;

    public RedisStringOperations(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void setString(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public String getString(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    public void setStringWithExpire(String key, String value, long timeout, TimeUnit unit) {
        redisTemplate.opsForValue().set(key, value, timeout, unit);
    }
}

2. 列表(List)

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class RedisListOperations {

    private final RedisTemplate<String, String> redisTemplate;

    public RedisListOperations(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void leftPush(String key, String value) {
        redisTemplate.opsForList().leftPush(key, value);
    }

    public void rightPush(String key, String value) {
        redisTemplate.opsForList().rightPush(key, value);
    }

    public List<String> getList(String key) {
        return redisTemplate.opsForList().range(key, 0, -1);
    }
}

3. 集合(Set)

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Set;

@Component
public class RedisSetOperations {

    private final RedisTemplate<String, String> redisTemplate;

    public RedisSetOperations(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void add(String key, String value) {
        redisTemplate.opsForSet().add(key, value);
    }

    public Set<String> getSet(String key) {
        return redisTemplate.opsForSet().members(key);
    }
}

4. 有序集合(ZSet)

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Set;

@Component
public class RedisZSetOperations {

    private final RedisTemplate<String, String> redisTemplate;

    public RedisZSetOperations(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void add(String key, String value, double score) {
        redisTemplate.opsForZSet().add(key, value, score);
    }

    public Set<String> getZSetRange(String key) {
        return redisTemplate.opsForZSet().range(key, 0, -1);
    }
}

5. 哈希(Hash)

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Map;

@Component
public class RedisHashOperations {

    private final RedisTemplate<String, Object> redisTemplate;

    public RedisHashOperations(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void putHash(String key, String hashKey, Object value) {
        redisTemplate.opsForHash().put(key, hashKey, value);
    }

    public Map<Object, Object> getHash(String key) {
        return redisTemplate.opsForHash().entries(key);
    }
}

在上述代码中,我们使用了RedisTemplate的不同操作接口来处理不同类型的数据。这些代码示例提供了基本的操作方法,包括设置值、获取值、添加元素等。在实际应用中,你可能需要根据具体需求进行调整和扩展。

标签:Java,String,中间件,Redis,RedisTemplate,key,import,public,redisTemplate
From: https://blog.csdn.net/ZQ200720/article/details/144419508

相关文章

  • Java 面试题大揭秘(0-25):50 道常见面试题及答案解析
    亲爱的小伙伴们......
  • Java-25 深入浅出 Spring - 实现简易Ioc-01 Servlet介绍 基本代码编写
    点一下关注吧!!!非常感谢!!持续更新!!!大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html案例思路参考来源来自网络视频,这里的案例是转账的案例。这里我们直接使用接口的方式,就不实现具体的页面了,我们直接通过接口调用的方式来模拟这一块。最终将实......
  • RedisShake同步例子(过滤同步)
    环境:OS:Centos7RedisShake:v4.2.2 1.下载地址https://github.com/tair-opensource/RedisShake/releases/download/v4.2.2/redis-shake-linux-amd64.tar.gz 2.解压安装mkdir-p/opt/redis-shake##安装包上传到该目录tar-xvfredis-shake-linux-amd64.tar.gz 3.修......
  • java aspose word 模板根据数据导出pdf
    支持以功能:1、字符串占位符替换。2、占位符循环替换。3、图片替换。4、基础图标,折现、饼图、柱状图。  本案例运行环境:1、asposeword21.1版本。2、jdk18。话不多说直接上代码。<!--图表相关--><dependency><groupId>jfree</groupId>......
  • JAVA中 普通方法/变量,静态方法/变量,之间的相互调用
    publicclassMyapp{//普通变量inta=1;//静态变量staticStringstr="字符串";//普通方法publicvoidMethod1(){//普通方法中可以使用普通属性/方法,静态属性/静态方法均是直接调用即可System.out.println(a);S......
  • 初始JavaEE篇 —— 网络原理---应用层协议
     找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程程(ಥ_ಥ)-CSDN博客所属专栏:JavaEE我们在前面简单的接触了 TCP/IP五层协议中的传输层协议,并使用UDP协议与TCP协议编写了一个简单的回显服务器与客户端。接下来,我们来深入学习应用层的协议。应用......
  • 谈谈服务雪崩效应?思维导图 代码示例(java 架构)
    服务雪崩效应是指在分布式系统或微服务架构中,当一个服务出现故障时,可能会导致调用它的其他服务也出现问题,进而引发连锁反应,最终造成整个系统的大面积瘫痪。这种情况就像雪崩一样,一旦开始就难以控制。服务雪崩的原因单点故障:某个关键组件的失败可能导致依赖它的所有服务都......
  • 深入理解 JavaScript 柯里化: 提升函数的复用性和灵活性
    引言在JS编程中,函数是一等公民,具备了强大的灵活性和复用性。而柯里化作为一种高阶技术,可以进一步提升函数的复用性和灵活性。通过柯里化,可以大大简化函数的调用方式,并创建更加灵活和可复用的函数在本篇博客中,我们将深入探讨JS中柯里化的概念和原理,并......
  • [Java]File文件对象
    File类是java.io包下的类,File类的对象,用于操作当前系统的文件或文件夹File类只能操作文件本身,不能读写文件里的数据创建File对象补充路径分隔符正斜杠/反斜杠\\跨平台File.separatoeFile对象可以指向不存在的文件路径:Filef3=newFile("不存在的文件路径......
  • 132Java基于SpringBoot的西山区家政服务网站设计与开发-java vue.js idea
    所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到项目介绍132Java基于SpringBoot的西山区家政服务网站设计与开发-javavue.jsidea系统实现截图技术栈介绍JDK版本:jdk1.8+编程语言:java框架支持:springboot数据库:mysql......