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

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.lryc.cn/news/395958.html

相关文章:

  • Obsidian 文档编辑器
  • Spring Boot项目中JPA操作视图会改变原表吗?
  • C++之goto陈述
  • ChatGPT提问提示指南PDF下载经典分享推荐书籍
  • 架构设计(2)云原生架构与实例部署
  • 《UDS协议从入门到精通》系列——图解0x84:安全数据传输
  • AFT:Attention Free Transformer论文笔记
  • Linux grep技巧 结合awk查询
  • 关于Qt模型插入最后一行数据中存在未填满的项,点击导致崩溃的解决办法
  • Interpretability 与 Explainability 机器学习
  • Vue3项目如何使用npm link本地测试组件库
  • 后端之路——阿里云OSS云存储
  • 大模型/NLP/算法面试题总结2——transformer流程//多头//clip//对比学习//对比学习损失函数
  • 【atcoder】习题——位元枚举
  • 世界人工智能大会 | 江行智能大模型解决方案入选“AI赋能新型工业化创新应用优秀案例”
  • css浮动及清除浮动副作用的三种解决方法
  • 图像类别生成数字标签
  • 【Python】已解决:SyntaxError: invalid character in identifier
  • RDNet实战:使用RDNet实现图像分类任务(一)
  • Java小白入门到实战应用教程-介绍篇
  • python脚本“文档”撰写——“诱骗”ai撰写“火火的动态”python“自动”脚本文档
  • 若依 / ruoyi-ui:执行yarn dev 报错 esnext.set.difference.v2.js in ./src/utils/index.js
  • 移动端Vant-list的二次封装,查询参数重置
  • SMU Summer 2024 Contest Round 2
  • Qt:11.输入类控件(QLineEdit-单行文本输入控件、QTextEdit-多行文本输入控件、QComboBox-下拉列表的控件)
  • Qt 音频编程实战项目
  • C#委托事件的实现
  • Java策略模式在动态数据验证中的应用
  • 【Linux】shell基础知识点(updating)
  • Python基础练习•二