当前位置: 首页 > news >正文

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服务器的IPhost: localhost#redis服务器的Portport: 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*/@Beanpublic 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 {@Autowiredprivate JedisPool jedisPool;@Testpublic 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.1port: 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 {@Autowiredprivate StringRedisTemplate template;// 约定:// 操作redis的key是字符串// value是字符串类型或字符串类型元素@Testpublic 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文库 

http://www.lryc.cn/news/311617.html

相关文章:

  • (Linux学习六)用户特殊权限类型,suid,chattr,umask
  • Mysql 数据类型的转换之 cast()
  • python重命名指定文件夹下的所有文件
  • 通过多线程并发方式实现服务器
  • 【C语言】指针超级无敌金刚霹雳进阶(但不难,还是基础)
  • 上位机图像处理和嵌入式模块部署(qmacvisual入门)
  • 数据库事务问题整理-MySQL
  • 工具函数模板题(蓝桥杯 C++ 代码 注解)
  • Ansible playbook 简介 使用场景
  • TS总结10、ts的 class 类型(配置项strictPropertyInitialization、非空断言)
  • leetcode 热题 100_找到字符串中所有字母异位词
  • 百度百科数据爬取 python 词条数据获取
  • 为不同文章形式选择不同的WordPress文章模板
  • MySQL存储引擎及索引机制
  • Leetcode算法题
  • 数据结构之七大排序
  • 【MySQL】数据库中常用的函数
  • 嵌入式面试常见问题(四)
  • 用Java在Spring Boot项目中,如何传递来传递一个对象(多个参数??
  • 如何利用ChatGPT搞科研?论文检索、写作、基金润色、数据分析、科研绘图(全球地图、植被图、箱型图、雷达图、玫瑰图、气泡图、森林图等)
  • 一命通关二分搜索
  • 串联所有单词的子串
  • 【会议征稿通知】第四届经济发展与商业文化国际学术会议(ICEDBC2024)
  • 回溯算法套路③排列型回溯+N皇后【基础算法精讲 16】
  • MyBatis-Plus 框架中的自定义元对象处理器
  • Node.js_基础知识(fs模块 - 文件操作)
  • 基于C#开发OPC DA客户端——搭建KEPServerEX服务
  • 让你的函数,返回你需要的“两个值” (函数传址、结构体作为参数传参)
  • 快速上手:在 Android 设备上运行 Pipy
  • 【操作系统学习笔记】文件管理1.3