8、Redis-Jedis、Lettuce和一个Demo

目录

一、Jedis

二、Lettuce

三、一个Demo


Java集成Redis主要有3个方案:Jedis、Lettuce和Redisson。

其中,Jedis、Lettuce侧重于单例Redis,而Redisson侧重于分布式服务。

项目资源在文末


一、Jedis

1、创建SpringBoot项目

2、引入依赖

其中,jedis是所需要的依赖,lombok是为了方便后续配置

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3、 配置yml

#redis配置--jedis版
jedis:
  pool:
    #redis服务器的IP
    host: localhost
    #redis服务器的Port
    port: 6379
    #数据库密码
    password:
    #连接超时时间
    timeout: 7200
    #最大活动对象数
    maxTotall: 100
    #最大能够保持idel状态的对象数
    maxIdle: 100
    #最小能够保持idel状态的对象数
    minIdle: 50
    #当池内没有返回对象时,最大等待时间
    maxWaitMillis: 10000
    #当调用borrow Object方法时,是否进行有效性检查
    testOnBorrow: true
    #当调用return Object方法时,是否进行有效性检查
    testOnReturn: true
    #“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
    timeBetweenEvictionRunsMillis: 30000
    #向调用者输出“链接”对象时,是否检测它的空闲超时;
    testWhileIdle: true
    # 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
    numTestsPerEvictionRun: 50

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4、导入配置文件和加载配置类

导入配置文件:JedisProperties,导入yml文件内容

加载配置类:JedisConfig,加载JedisProperties内容

①JedisProperties

package com.example.redis_java.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "jedis.pool")
@Getter
@Setter
public class JedisProperties {
    private int maxTotall;
    private int maxIdle;
    private int minIdle;
    private int maxWaitMillis;
    private boolean testOnBorrow;
    private boolean testOnReturn;
    private int timeBetweenEvictionRunsMillis;
    private boolean testWhileIdle;
    private int numTestsPerEvictionRun;

    private String host;
    private String password;
    private int port;
    private int timeout;
}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

②JedisConfig

说明:如果SpringBoot是2.x版本,JedisConfig请使用注释掉的两行代码而不是它们对应的上面的代码

package com.example.redis_java.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.time.Duration;

@Configuration
public class JedisConfig {
    /**
     * jedis连接池
     *
     * @param jedisProperties
     * @return
     */
    @Bean
    public JedisPool jedisPool(JedisProperties jedisProperties) {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(jedisProperties.getMaxTotall());
        config.setMaxIdle(jedisProperties.getMaxIdle());
        config.setMinIdle(jedisProperties.getMinIdle());
        config.setMaxWait(Duration.ofMillis(jedisProperties.getMaxWaitMillis()));
        // config.setMaxWaitMillis(jedisProperties.getMaxWaitMillis());
        config.setTestOnBorrow(jedisProperties.isTestOnBorrow());
        config.setTestOnReturn(jedisProperties.isTestOnReturn());
        config.setTimeBetweenEvictionRuns(Duration.ofMillis(jedisProperties.getTimeBetweenEvictionRunsMillis()));
        // config.setTimeBetweenEvictionRunsMillis(jedisProperties.getTimeBetweenEvictionRunsMillis());
        config.setTestWhileIdle(jedisProperties.isTestWhileIdle());
        config.setNumTestsPerEvictionRun(jedisProperties.getNumTestsPerEvictionRun());

        if (StringUtils.hasText(jedisProperties.getPassword())) {
            return new JedisPool(config, jedisProperties.getHost(), jedisProperties.getPort(), jedisProperties.getTimeout(), jedisProperties.getPassword());
        }
        return new JedisPool(config, jedisProperties.getHost(), jedisProperties.getPort(), jedisProperties.getTimeout());
    }
}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

③项目结构

5、测试

①测试前

②测试类

package com.example.redis_java;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@SpringBootTest
public class JedisTest {
    @Autowired
    private JedisPool jedisPool;

    @Test
    public void testConnection() {
        System.out.println(jedisPool);
        Jedis jedis = jedisPool.getResource();

        jedis.set("name", "Trxcx");
        System.out.println(jedis.get("name"));
        jedis.sadd("mySet", "a", "b", "d");
        System.out.println(jedis.smembers("mySet"));

        // jedis的方法名就是redis的命令
        jedis.close();
    }
}

③项目结构

  

④运行测试类

⑤测试后

说明:jedis的方法名就是redis的命令。如sadd、smembers。


二、Lettuce

Lettuce配置比较简单,这里直接在上一个项目的基础上进行配置,新项目配置Lettuce方法一致。

1、引入依赖

        <!--Lettuce依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2、配置yml

如果有密码,设置对应的密码。

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    # password: admin

3、测试

①编写测试类

package com.example.redis_java;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

@SpringBootTest
public class LettureTest {
    @Autowired
    private StringRedisTemplate template;
    // 约定:
    // 操作redis的key是字符串
    // value是字符串类型或字符串类型元素

    @Test
    public void testRedis() {
         template.opsForValue().set("name", "Trxcx");
         System.out.println(template.opsForValue().get("name"));
         template.opsForSet().add("Games","RDR2","CS2","ACOd");
         System.out.println(template.opsForSet().members("Games"));

        // 操作string
        // template.opsForValue().xx();
        // 操作hash
        // template.opsForHash().xx();
        // 操作list
        // template.opsForList().xx();
        // 操作set
        // template.opsForSet().xx();
        // 操作zset
        // template.opsForZSet().xx();

        // spring-data-redis方法是redis命令全称
        // template.opsForList().rightPush()  //rpush

        // 全局命令在template类上
        // template.keys("*");
    }
}

②项目结构

③运行测试类

4、说明:

①Lettuce使用StringRedisTemplate的一个对象完成对Redis的操作,不存在像Jedis那样获取Redis资源使用完再关闭的情况。

②Lettuce通过opsForxxx完成对不同value类型的操作,例如

  • opsForValue()是操作String类型的
  • opsForHash()是操作Hash类型的
  • opsForList()是操作List类型的
  • opsForSet()是操作Set类型的
  • opsForZSet()是操作Zset类型的

③Lettuce的方法名是Redis命令的全称

例如:template.opsForList().rightPush(),对应Redis中的rpush命令

④全局命令作用在StringRedisTemplate对象上

例如:template.keys("*");


三、一个Demo

这个demo实现了每次刷新或者访问网页时,阅读量+1的效果。

启动SpringBoot项目后,访问http://localhost:8080/detail.html,每次刷新页面阅读量+1。 


项目资源链接:

1、【免费】Redis-Java.zip资源-CSDN文库

2、【免费】RedisDemo.zip资源-CSDN文库 

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

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

相关文章

114.龙芯2k1000-pmon(13)- 串口如何用

本文是讲原理图的部分&#xff0c;跟pmon的关系不大&#xff01;&#xff01; 参考手册&#xff1a;《龙芯2K1000处理器用户手册.pdf》 刚刚看数据手册&#xff0c;让我是有点惊讶&#xff0c;但是也让我迷惑。&#xff08;一个串口复用为4个是啥意思&#xff1f;&#xff09;…

MYSQL的优化学习,从原理到索引,在到事务和锁机制,最后的主从复制、读写分离和分库分表

mysql的优化学习 为什么选择Mysql不选择其他的数据库&#xff1f;还有哪些&#xff0c;有什么区别&#xff1f; Mysql&#xff1a;开源免费版本可用&#xff0c;适用于中小型应用 Oracle&#xff1a;适用于大型企业级应用&#xff0c;复杂的业务场景和大量数据的处理&#xf…

ctf_show笔记篇(web入门---命令执行)

目录 命令执行 29&#xff1a;有很多种方法可以使用内联法例如system(cat ls)或者像它提示的一样echo nl fl""ag.php 30&#xff1a;这里与29题原理相同只不过多禁用了一个system和php####请通过29题举一反三 31&#xff1a;这一题有多种解法看自身理解&#xff0…

关于阿里云oss的冗余存储类型问题

不得不说一个问题&#xff0c;阿里云服务方便我们的同时 &#xff0c;他们的文档写的是真的差劲。 东一块&#xff0c;西一块的。非常不好系统的阅读&#xff0c;文档结构比较散。 关于阿里云oss的冗余存储类型问题&#xff0c;这里说一下&#xff0c;简直是个坑。 首页阿里…

基于springboot+vue的在线考试与学习交流平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【C语言】熟悉文件基础知识

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 文件 为了数据持久化保存&#xff0c;使用文件&#xff0c;否则数据存储在内存中&#xff0c;程序退出&#xff0c;内存回收&#xff0c;数据就会丢失。 程序设计中&…

【UEFI实战】BIOS中的openssl

BIOS中的openssl openssl是一个密码库或者密码工具&#xff0c;在密码学基础_hex string is too short, padding with zero bytes t-CSDN博客介绍了基本的密码学概念已经openssl工具的使用&#xff0c;而这里将介绍BIOS下如何使用openssl。 在开源的BIOS代码库EDK中包含一个C…

【接口测试】常见HTTP面试题

目录 HTTP GET 和 POST 的区别 GET 和 POST 方法都是安全和幂等的吗 接口幂等实现方式 说说 post 请求的几种参数格式是什么样的&#xff1f; HTTP特性 HTTP&#xff08;1.1&#xff09; 的优点有哪些&#xff1f; HTTP&#xff08;1.1&#xff09; 的缺点有哪些&#x…

车灯修复UV胶的优缺点有哪些?

车灯修复UV胶的优点如下&#xff1a; 优点&#xff1a; 快速固化&#xff1a;通过紫外光照射&#xff0c;UV胶可以在5-15秒内迅速固化&#xff0c;提高了修复效率。高度透明&#xff1a;固化后透光率高&#xff0c;几乎与原始车灯材料无法区分&#xff0c;修复后车灯外观更加…

web漏洞与规避

文章目录 一、XSS 跨站脚本攻击1.1 XSS攻击的主要类型反射型XSS存储型XSSDOM型XSS 1.2 前端开发如何应对XSS 二、CSRF 跨站请求伪造2.1 CSRF例子2.2 前端开发如何应对CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站脚本攻击 攻击者通过在受害者的…

基于springboot+vue的装饰工程管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

重学Springboot3-@ConditionalOnXxx条件注解

重学Springboot3-ConditionalOnXxx条件注解 引言常见的条件注解常见的条件注解示例扩展条件注解1. ConditionalOnJndi2. ConditionalOnJava3. ConditionalOnCloudPlatform4. ConditionalOnEnabledResourceChain5. 自定义条件注解 总结 引言 Spring Boot 提供了一组强大的条件注…

AutoEncoder和 Denoising AutoEncoder学习笔记

参考&#xff1a; 【1】 https://lilianweng.github.io/posts/2018-08-12-vae/ 写在前面&#xff1a; 只是直觉上的认识&#xff0c;并没有数学推导。后面会写一篇&#xff08;抄&#xff09;大一统文章&#xff08;概率角度理解为什么AE要选择MSE Loss&#xff09; TOC 1 Au…

Python解释器及PyCharm安装教程

PyCharm官方下载地址☞https://www.jetbrains.com/pycharm/download/?sectionwindows Python解释器官方下载地址☞ https://www.python.org/downloads/windows/

实践航拍小目标检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测&#xff0c;基于yolov…

【C++】十大排序算法之 冒泡排序 选择排序

本次介绍内容参考自&#xff1a;十大经典排序算法&#xff08;C实现&#xff09; - fengMisaka - 博客园 (cnblogs.com) 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序…

Golang 调度器 GPM模型

Golang 调度器 GPM模型 1 多进程/线程时代有了调度器需求 在多进程/多线程的操作系统中&#xff0c;就解决了阻塞的问题&#xff0c;因为一个进程阻塞cpu可以立刻切换到其他进程中去执行&#xff0c;而且调度cpu的算法可以保证在运行的进程都可以被分配到cpu的运行时间片。这…

腾讯云幻兽帕鲁服务器使用Linux和Windows操作系统,对用户的技术要求有何不同?

腾讯云幻兽帕鲁服务器使用Linux和Windows操作系统对用户的技术要求有何不同&#xff1f; 首先&#xff0c;从操作界面的角度来看&#xff0c;Windows操作系统相对简单易操作&#xff0c;适合那些偏好使用图形化界面操作的用户。而Linux操作系统则需要通过命令行完成&#xff0…

网络爬虫部分应掌握的重要知识点

目录 一、预备知识1、Web基本工作原理2、网络爬虫的Robots协议 二、爬取网页1、请求服务器并获取网页2、查看服务器端响应的状态码3、输出网页内容 三、使用BeautifulSoup定位网页元素1、首先需要导入BeautifulSoup库2、使用find/find_all函数查找所需的标签元素 四、获取元素的…

图论 - 二分图(染色法、匈牙利算法)

文章目录 前言Part 1&#xff1a;染色法判定二分图1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2&#xff1a;匈牙利算法求二分图的最大匹配1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客将介绍两种二分图有关的算法&#xf…