Redis-Jedis连接池\RedisTemplate\StringRedisTemplate

Redis-Jedis连接池\RedisTemplate\StringRedisTemplate

  • 1. Jedis连接池
    • 1.1 通过工具类
    • 1.1.1 连接池:JedisConnectionFactory:
    • 1.1.2 test:(代码其实只有连接池那里改变了)
  • 2. SpringDataRedis(lettuce)
    • 2.1 新建一个springboot项目:
    • 2.2 pom:
    • 2.3 application.yaml:
    • 2.4 Test
  • 3 为什么要使用StringRedisTemplate?
    • 3.1 进行序列化配置:
      • 3.1.1 创建配置类RedisConfig :
      • 3.1.2 修改Test:
      • 3.1.3 存储对象
  • 4 StringRedisTemplate
    • 4.1 问题
    • 4.2 重新测试,使用StringRedisTemplate:
    • 4.3 RedisTemplate 操作Hash

1. Jedis连接池

1.1 通过工具类

1.1.1 连接池:JedisConnectionFactory:

package com.fst.jedis.util;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;public class JedisConnectionFactory {private static final JedisPool jedispool;static {//配置连接池JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(8);//连接数,最多只允许创建8个poolConfig.setMaxIdle(8);//最大空闲连接数poolConfig.setMinIdle(0);//释放到0为止poolConfig.setMaxWaitMillis(1000);//当连接池里,没有连接可以用的时候,我们等多少时间,默认值为-1(一直等等到有连接),这里设置1000毫秒//创建连接池对象jedispool=new JedisPool(poolConfig,"192.168.88.128",6379,1000,"123456");}public static Jedis getJedisPool(){return jedispool.getResource();}
}

1.1.2 test:(代码其实只有连接池那里改变了)

package com.fst.test;
import com.fst.jedis.util.JedisConnectionFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;
import java.util.Map;
public class JedisTest {private Jedis jedis; //创建一个jedis对象@BeforeEach //初始化方法void setUp() {//jedis=new Jedis("192.168.88.128",6379);//地址和端口号,没有连接池的时候才需要使用这个jedis= JedisConnectionFactory.getJedisPool();jedis.auth("123456");//密码jedis.select(0);//哪个库}@Testvoid testString() {String result = jedis.set("name", "涛哥");//String类型,创建System.out.println("result="+result);String name = jedis.get("name");//得到值System.out.println("name="+name);}@Testvoid testHash(){//插入hashjedis.hset("user:1","name","涛哥");//Hash类型,创建jedis.hset("user:1","age","21");//Hash类型,创建Map<String, String> map = jedis.hgetAll("user:1"); //讲得到的Hash用Map封装起来System.out.println("map="+map);//打印map}@AfterEachvoid tearDown() {if (jedis != null){jedis.close();//底层源码里:没有连接池释放缓存,有连接池则是归还}}}

2. SpringDataRedis(lettuce)

2.1 新建一个springboot项目:

在这里插入图片描述
在这里插入图片描述

2.2 pom:

<?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>3.3.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.fst</groupId><artifactId>redis-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>redis-demo</name><description>redis-demo</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>21</java.version></properties><dependencies>
<!--  redis依赖      --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
<!--  common-pool 连接池--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>
<!--  Jackson依赖,用来支持我们配置文件里面的序列化转为json--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

2.3 application.yaml:

spring:data:redis:host: 192.168.88.128port: 6379password: 123456lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 1000ms

2.4 Test

package com.fst;import com.fst.redis.pojo.User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;@SpringBootTest
class RedisDemoApplicationTests {@Resourceprivate RedisTemplate redisTemplate;//注入RedisTemplate依赖@Testvoid testString() {//写入一条String数据redisTemplate.opsForValue().set("name","涛哥");//获取String数据Object name = redisTemplate.opsForValue().get("name");System.out.println("name="+name);}}

3 为什么要使用StringRedisTemplate?

因为我们使用RedisTemplate的时候他写入redis中的是
在这里插入图片描述
因为序列化到redis的时候,是以二进制的形式存储的,所以需要将对象序列化,才能存储到redis中,和redis的值保持一致。

3.1 进行序列化配置:

3.1.1 创建配置类RedisConfig :

package com.fst.redis.config;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.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
//因为序列化到redis的时候,是以二进制的形式存储的,所以需要将对象序列化,才能存储到redis中,和redis的值保持一致
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){//连接工厂由springboot创建//创建RedisTemplate 对象RedisTemplate<String, Object> template = new RedisTemplate<>();//设置连接工厂template.setConnectionFactory(connectionFactory);//创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();//设置key的序列化template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());//设置Value的序列化template.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);//返回return template;}
}

3.1.2 修改Test:

package com.fst;import com.fst.redis.pojo.User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;@SpringBootTest
class RedisDemoApplicationTests {@Resourceprivate RedisTemplate<String,Object> redisTemplate;//注入redisTemplate的依赖//并且,还需要指定<String,Object>。@Testvoid testString() {//写入一条String数据redisTemplate.opsForValue().set("name","涛哥");//获取String数据Object name = redisTemplate.opsForValue().get("name");System.out.println("name="+name);}}

3.1.3 存储对象

新建User类:

package com.fst.redis.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private String name;private int age;
}

test:

package com.fst;import com.fst.redis.pojo.User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;@SpringBootTest
class RedisDemoApplicationTests {@Resourceprivate RedisTemplate<String,Object> redisTemplate;//注入redisTemplate的依赖@Testvoid testString() {//写入一条String数据redisTemplate.opsForValue().set("name","涛哥");//获取String数据Object name = redisTemplate.opsForValue().get("name");System.out.println("name="+name);}@Testvoid testSaveUser(){//写入数据redisTemplate.opsForValue().set("user:100",new User("涛哥",18));//获取数据User o = (User) redisTemplate.opsForValue().get("user:100");System.out.println("o="+o);}}

在这里插入图片描述

4 StringRedisTemplate

4.1 问题

在这里插入图片描述

4.2 重新测试,使用StringRedisTemplate:

(别忘了在pom中引入我们的json依赖),mapper工具类,可以学习

package com.fst;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fst.redis.pojo.User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.lang.runtime.ObjectMethods;
import java.util.Map;@SpringBootTest
class RedisStringTests {@Resourceprivate StringRedisTemplate stringRedisTemplate;@Testvoid testString() {//写入一条String数据stringRedisTemplate.opsForValue().set("name","涛哥");//获取String数据Object name = stringRedisTemplate.opsForValue().get("name");System.out.println("name="+name);}private static  final ObjectMapper mapper =new ObjectMapper();@Testvoid testSaveUser() throws JsonProcessingException {//创建对象User user = new User("涛哥",18);//手动序列化String json = mapper.writeValueAsString(user);//写入数据stringRedisTemplate.opsForValue().set("user:200",json);//获取数据String jsonUser =  stringRedisTemplate.opsForValue().get("user:200");//手动反序列化User user1 = mapper.readValue(jsonUser, User.class);System.out.println("user1="+user1);}@Testvoid testHash(){stringRedisTemplate.opsForHash().put("user:400","name","涛哥");stringRedisTemplate.opsForHash().put("user:400","age","20");Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:400");System.out.println("entries="+entries);}
}

在这里插入图片描述

4.3 RedisTemplate 操作Hash

package com.fst;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fst.redis.pojo.User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.lang.runtime.ObjectMethods;
import java.util.Map;@SpringBootTest
class RedisStringTests {@Resourceprivate StringRedisTemplate stringRedisTemplate;@Testvoid testString() {//写入一条String数据stringRedisTemplate.opsForValue().set("name","涛哥");//获取String数据Object name = stringRedisTemplate.opsForValue().get("name");System.out.println("name="+name);}private static  final ObjectMapper mapper =new ObjectMapper();@Testvoid testSaveUser() throws JsonProcessingException {//创建对象User user = new User("涛哥",18);//手动序列化String json = mapper.writeValueAsString(user);//写入数据stringRedisTemplate.opsForValue().set("user:200",json);//获取数据String jsonUser =  stringRedisTemplate.opsForValue().get("user:200");//手动反序列化User user1 = mapper.readValue(jsonUser, User.class);System.out.println("user1="+user1);}@Testvoid testHash(){stringRedisTemplate.opsForHash().put("user:400","name","涛哥");stringRedisTemplate.opsForHash().put("user:400","age","20");Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:400");System.out.println("entries="+entries);}
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十五、小型电脑没有数字键及insert,怎么解决IDEA快速插入getset构造这些方法

&#x1f33b;&#x1f33b;目录 一、小型电脑没有数字键及insert&#xff0c;怎么解决IDEA快速插入getset构造这些方法 一、小型电脑没有数字键及insert&#xff0c;怎么解决IDEA快速插入getset构造这些方法 解决&#xff1a; 1.winR打开搜索 2.osk回车 屏幕就出现了这样的一…

CC7利用链分析

分析版本 Commons Collections 3.2.1 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 CC7,6,5都是在CC1 LazyMap利用链(引用)的基础上。 只是进入到LazyMap链的入口链不同。 CC7这个链有点绕&#xff0c;下面顺着分析一下利用链。 入口类是Hashtable&…

前端入门知识分享:如何在HTML或CSS文件中引用CSS文件。

阅读提示&#xff1a;本文仅仅仅适用于刚刚接触HTML和CSS的小白从业者&#xff0c;新人爱好者。自觉身份不符的老鸟们&#xff0c;尽快绕行吧&#xff01; 什么是CSS&#xff1f;什么是CSS文件。 CSS&#xff0c;全称为Cascading Style Sheets&#xff08;层叠样式表&#xff…

分布式IO模块软件配置

组态接口模块 1、打开网络视图 2、拖拽出ET200SP 3、双击ET200SP的图片&#xff0c;进入从站配置 总线适配器的组态更换 关于IO地址分配&#xff0c;需要建立好子网通信后&#xff0c;在主机上配置。 可以看到IP 和设备名 设备与控制器的Profinet连接 先找到设备名称再找…

HarmonyOS鸿蒙DevEco Studio无法连接本地模拟器

使用DevEcoStudio 5.0.3.403版本 发现无法选择模拟器 解决方法&#xff1a; 1、打开模拟器 2、关闭DevEco Studio&#xff0c;&#xff08;不要关闭模拟器&#xff09; 3、重新打开DevEco Studio。

四道经典算法JAVA

1.爬楼地 爬20个台阶的爬法:f(19)f(18) 经典斐波拉契数列问题 public class demo4 {//爬楼梯问题public static void main(String[] args) {System.out.println(getSum(20));}public static int getSum(int n) {if (n 1)return 1;if (n 2)return 2;return getSum(n - 1) …

SpringBoot:SpringBoot中如何实现对Http接口进行监控

一、前言 Spring Boot Actuator是Spring Boot提供的一个模块&#xff0c;用于监控和管理Spring Boot应用程序的运行时信息。它提供了一组监控端点&#xff08;endpoints&#xff09;&#xff0c;用于获取应用程序的健康状态、性能指标、配置信息等&#xff0c;并支持通过 HTTP …

关于Python的类的一些理解

才发现python的类对象只能调用类方法 我想使用对类对象a使用系统调用的len方法就会报错 2.类对象a是什么&#xff1f; 答&#xff1a;是所有的带有self的成员变量 举例说明&#xff1a;红色的就是a里面的东西 class A:def __init__(self,data):self.datadataself.b1self.d{a…

解读‘‘不要卷模型,要卷应用‘‘

前言 2024 年 7 月 4 日&#xff0c;世界人工智能大会暨人工智能全球治理高级别会议全体会议在上海世博中心举行。百度创始人李彦宏在产业发展主论坛上发言&#xff0c;呼吁不要卷模型&#xff0c;要卷应用。 目录 四个要点 积极的观点 不合理性 总结 四个要点 李彦宏的呼吁…

多模态:Nougat详解

文章目录 前言一、模型结构1. encoder2. decoder3. set 二、数据增强三、数据splitting the pages 四、实验评估repetitions during inference 五、代码1. 环境安装2. Dataset&#xff08;dataset.py&#xff09;3. Model&#xff08;model.py&#xff09; 总结 前言 科学知识…

一网统管/视频汇聚/安防监控平台EasyCVR启动后无法访问是什么原因?

智慧城市/一网统管/视频汇聚/安防监控平台EasyCVR兼容性强&#xff0c;支持多协议接入&#xff0c;包括国标GB/T 28181协议、GA/T 1400协议、部标JT808协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等&#xff0c;并能对外分…

接口测试课程结构

课程大纲 如图&#xff0c;接下来的阶段课程&#xff0c;依次专项讲解如下专题&#xff0c;能力级别为中级&#xff0c;进阶后基本为中高级&#xff1a; 1.接口基础知识&#xff1b; 2.抓包工具&#xff1b; 3.接口工具&#xff1b; 4.mock服务搭建&#xff08;数据模拟服务&am…

Git使用——首次创建本地仓库、配置、初始化、关联远程仓库

1、安装 Git软件 官网&#xff1a;git-scm.com 有时候官网打不开&#xff0c;这里留存个之前下载过的安装包&#xff1a; https://download.csdn.net/download/weixin_43908355/89502977 2、配置本地仓库 在准备建仓库的文件夹里&#xff0c;右键点击&#xff1a;Git Bash …

鸿蒙系统创建签名文件及使用创建签名文件打包并安装

* 第一步 第二步&#xff1a;创建.p12文件&#xff0c;点击New如果有的话就Choose Existing 填好下面信息 点击Next进入到下面界面 开始生成csr文件如下图 点击OK–>Finish 文件保存在了下面目录 第三步 1.访问华为开发者平台&#xff0c;登录开发者账号&#xff0c;进…

【linux服务器篇】-Redis-RDM远程连接redis

redis desktop manager 使用远程连接工具RDM连接redis 市面上比较常见的其中一款工具redis desktop manager 简单的说&#xff1a; Redis Desktop Manager 简单的来讲就是Redis可视化工具&#xff0c;可以让我们看到Redis中存储的内容。 redis desktop manager是一款功能强…

【面试八股总结】面向对象三大特性、虚函数、纯虚函数、虚继承

参考资料&#xff1a;阿秀 一、面向对象三大特性 封装&#xff1a;将数据和代码捆绑在一起&#xff0c;避免外界干扰和不确定性访问 继承&#xff1a;让某种类型对象获得另一个类型对象的属性和方法 多态&#xff1a;同一种事务表现出不同事务的能力&#xff0c;即&#xf…

数据库课设---学生宿舍管理系统(sql server+C#)

1.引言 1.1 内容及要求 设计内容&#xff1a;设计学生宿舍管理系统。 设计要求&#xff1a; &#xff08;1&#xff09;数据库应用系统开发的需求分析&#xff0c;写出比较完善系统功能。 &#xff08;2&#xff09;数据库概念模型设计、逻辑模型设计以及物理模型设计。 …

yolov8 人体姿态识别

引言 在计算机视觉的各种应用中&#xff0c;人体姿态检测是一项极具挑战性的任务&#xff0c;它能够帮助我们理解人体各部位的空间位置。本文将详细介绍如何使用 YOLOv8 和 Python 实现一个人体姿态检测系统&#xff0c;涵盖模型加载、图像预处理、姿态预测到结果可视化的全流…

Echarts水球图(liquidFill)添加文字

效果 代码 {type: liquidFill,shape: shapes[0].value,radius: 90%,data: [{name: 独立百货,value: 0}],center: [50%, 50%],color: [{type: linear,x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: #446bf5},{offset: 1,color: #2ca3e2}],globalCoord: false}],backgro…

JSP实现简单的登录和注册

JSP实现登录和注册&#xff08;Map集合模拟数据库&#xff09; 1、login.jsp2、 loginSelect.jsp3、register.jsp4、 RegisterSelect.jsp5、 index.jsp 1、login.jsp login.jsp中username和password在LoginSelect.jsp验证是否一致使用session.setAttribute("login_msg&quo…