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

个人 网站建设方案书 备案湖南正规seo公司

个人 网站建设方案书 备案,湖南正规seo公司,林业网站建设方案,重庆梁平网站建设报价SpringDataRedis简介 SpringData是Spring中专门进行数据操作的模块,包含了对于各种数据库的集成。其中对Redis的集成模块叫做SpringDataRedis(官网地址:Spring Data Redis)。其最核心的特点就是提供了不同Redis客户端的整合&…

SpringDataRedis简介

SpringDataSpring中专门进行数据操作的模块,包含了对于各种数据库的集成。其中对Redis的集成模块叫做SpringDataRedis(官网地址:Spring Data Redis)。其最核心的特点就是提供了不同Redis客户端的整合:结合了JedisLettuce提供了RedisTemplate这个统一的操作模板来操作Redis,下图是SpringDataRedis的其他特点:
在这里插入图片描述

由于Spring系列的强大生态支持,和SpringDataRedis本身优秀的使用体验,现在越来越多的企业倾向于使用SpringDataRedis作为RedisJava客户端,同时本人也推荐大家使用SpringDataRedis

SpringDataRedis快速入门

引入依赖

我们使用SpringBoot框架来进行SpringBootRedis的快速入门。由于SpringBoot已经提供了对SpringDataRedis的支持(可以在创建SpringBoot项目的时候将SpringDataRedis的依赖引入到pom.xml文件中),所以说使用起来非常的简单,如果没有在创建项目时引入依赖,也可以进行手动引入,在引入时不但需要SpringDataRedis的依赖,还需要一个连接池依赖来实现连接池(commons-pool2):

<!-- SpringDataRedis依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>3.4.6</version>
</dependency>
<!-- 连接池依赖 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.12.0</version>
</dependency>

配置文件

因为我们使用了SpringBoot框架,所以说对于Redis连接的配置我们可以直接基于application文件进行配置:

spring:data:redis:host: 192.168.181.134port: 6379password: your password# 连接池配置lettuce:pool:max-active: 8 # 最大连接数max-idle: 8 # 最大空闲连接min-idle: 4 # 最小空闲连接max-wait: 1000ms # 连接等待时间

在配置连接池的时候需要特别注意,可以使用JedisLettuce两个连接池: 在这里插入图片描述
Spring默认使用的是Lettuce连接池,可以从Maven依赖传递中看出:
在这里插入图片描述

而我们并没有引入Jedis的依赖,所以说在配置连接池的时候使用Lettuce即可,如果想要使用Jedis连接池,则需要引入对应的依赖。

编码操作

上文提到了SpringDataRedis提供了一个RedisTemplate这个统一的操作模板来操作Redis,所以说想要使用SpringDataRedis只需要学会RedisTemplate即可RedisTemplate中封装了各种对于Redis的操作,并且将不同数据类型的操作API封装到了不同的类型中:
在这里插入图片描述

下面是一个简单的RedisTemplate操作示例:

package com.wzb;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.RedisTemplate;@SpringBootTest
class RedisSpringDataApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid testString() {// 存储一条String数据redisTemplate.opsForValue().set("name", "jack");// 获取String数据Object name = redisTemplate.opsForValue().get("name");System.out.println(name);}}

这是一个SpringBoot的测试类,其中通过@Autowired注解注入了RedisTemplate,然后在测试方法中,通过opsForValue来操作String类型的数据,并且通过set方法存入一条KeynameValuejack的数据。但是这样存入数据之后,我们是无法正常读取的,让我们通过可视化界面查看一下刚才存入的数据:
在这里插入图片描述
在这里插入图片描述

我们可以看到在我们原本的Key:name之间有一大串字符,在原本的Value:jack之前也有一大串字符。这是因为RedisTemplate在存入数据之前需要将数据序列化,而默认的序列化器是JdkSerializationRedisSerializer也就是JDK的默认序列化器,该序列化器会将Java对象转换为Java标准的二进制序列化,而那些十六进制的特殊字符是JDK序列化的魔法数。这样的状况显然不是我们想看到的,因为这样的话存入的Key-Value的值完全被改变了,无法直接进行读取或修改,此时,就需要配置RedisTemplate的序列化器。

配置RedisTemplate的序列化器

在这里插入图片描述

通过观察RedisTemplate的源代码发现,RedisTemplate一共可以支持4个序列化器的配置,并且由于这4个序列化器的配置都是null,所以说会使用默认的JdkSerializationRedisSerializer序列化器。可供选择的Serializer如图所示:
在这里插入图片描述
在这里插入图片描述

一般对于Key的序列化会使用StringRedisSerializer,而Value的序列化器使用 genericJackson2JsonRedisSerializer这个序列化器会将Java对象转为Json字符串然后再存储到Redis中。
我们可以创建一个类来完成RedisTemplate的序列化器配置:

package com.wzb.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序列化设置*/
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {// 创建RedisTemplate对象RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);// 创建Json序列化工具GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// 设置Key序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());// 设置Value序列化redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);// 返回return redisTemplate;}}

想要使用genericJackson2JsonRedisSerializer序列化器还需要引入Json相关依赖:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId>
</dependency>

然后就可以修改原来代码,注入我们自定义序列化器的RedisTemplate

@Autowired
private RedisTemplate<String, Object> redisTemplate;

测试之后发现,存入的数据是我们想要的结果:
在这里插入图片描述

然后测试存入一个Java对象:

@Test
void testObject() {redisTemplate.opsForValue().set("user", new User("zhangsan", 20));User user = (User)redisTemplate.opsForValue().get("user");System.out.println(user);
}

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

发现存取都是没有问题的,更换RedisTemplate序列化器成功。

StringRedisTemplate

在使用genericJackson2JsonRedisSerializer序列化器存储一个Java对象时,除了对象的属性外,还会存储这个类的全类名以便于反序列化。这样看似很方便,但实际上存在一个很大的问题:耗费了太多的额外存储空间。因为Redis是基于内存的,众所周知,内存是十分宝贵的,所以说要尽量高效地使用内存,将全类名存入Redis是不推荐的做法。
解决方法就是对于Value,也使用和Key一样的StringRedisSerializer序列化器,Value当作String类型进行处理,然后在Java代码中通过程序手动序列化和反序列化Spring早就为我们考虑到了这一点,于是提供了一个StringRedisTemplate工具,其KeyValue的序列化器就是StringRedisSerializer

在这里插入图片描述
我们就可以使用StringRedisTemplate来操作,而无需自己去设置序列化器:

package com.wzb;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wzb.pojo.User;
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;import java.util.Map;@SpringBootTest
public class StringRedisTemplateTests {@Autowiredprivate StringRedisTemplate stringRedisTemplate;private static final ObjectMapper mapper = new ObjectMapper();@Testvoid testSave() throws JsonProcessingException {// 创建对象User user = new User("lisi", 25);// 手动序列化String json = mapper.writeValueAsString(user);// 写入数据stringRedisTemplate.opsForValue().set("user", json);// 获取数据String jsonUser = stringRedisTemplate.opsForValue().get("user");// 手动反序列化User readUser = mapper.readValue(jsonUser, User.class);System.out.println(readUser);}}

使用了StringRedisTemplate之后,需要我们手动进行对象的序列化和反序列化,其他的操作和使用RedisTemplate并无差别,但是这样之后,存储一个Java对象就不会再存储其字节码等额外信息了:

在这里插入图片描述

这样做会增加额外的代码处理,但是可以极大的节约内存资源,是推荐的做法。

http://www.dtcms.com/wzjs/302771.html

相关文章:

  • 河南民基建设工程有限公司网站微信广告
  • 不再单独建设政府网站惠州seo建站
  • 网站建设的实验心得体会重庆seo招聘
  • wordpress 众筹网站南京网站设计
  • 网站建设色调的网络营销策略的定义
  • 比较好看的企业网站百度seo
  • 网赌赢了钱被网站黑了需要怎么做软文范文
  • 专业云南做网站qq推广工具
  • 响水做网站的seo搜索是什么
  • 网站建设的最新技术新平台推广
  • 网站建设与管理课后作业答案百度推广怎么做最好
  • 做网站模板的网页名称是m开头搜索引擎营销特点
  • 公司网站格式建设网站前的市场分析
  • 长治新闻今日头条百度推广seo
  • 建行个人网上银行广告优化师是做什么的
  • 如何更换网站图片富阳seo关键词优化
  • 做网站开发的商标注册武汉seo排名
  • 怎么建设交友网站互联网营销
  • 怎么把网站地图上传怎样推广网站
  • 医院网站建设方案汕头企业网络推广
  • 有没有返利网站做京东的企业网站营销的优缺点及案例
  • dz论坛可以做招聘网站今日头条新闻10条简短
  • 接单网个人接单沈阳关键词快照优化
  • 慈溪做无痛同济&网站百度域名注册官网
  • 工作人员回应网红独臂猴咬伤师太seo是什么意思中文翻译
  • 做自己网站做站长个人网页免费域名注册入口
  • 自己电脑做网站需要备案吗2网络推广公司简介模板
  • 深圳二维码网站建设谷歌paypal官网登录入口
  • 太原推广型网站制作怎么网上宣传自己的产品
  • wordpress google搜索网站推广优化服务