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

网站建设的售后服务WordPress微说

网站建设的售后服务,WordPress微说,福田蒙派克油耗是多少,宁波无痛人流医院文章目录 前言第3章 Redis的Java客户端3.1 Jedis客户端3.1.1 快速使用3.1.2 连接池 3.2 SpringDataRedis客户端3.2.1 快速使用3.2.2 自定义序列化3.2.3 StringRedisTemplate 3.3 小结 前言 在上一章【Redis从入门到精通(二)Redis的数据类型和常见命令介绍】中#xff0c;学习… 文章目录 前言第3章 Redis的Java客户端3.1 Jedis客户端3.1.1 快速使用3.1.2 连接池 3.2 SpringDataRedis客户端3.2.1 快速使用3.2.2 自定义序列化3.2.3 StringRedisTemplate 3.3 小结 前言 在上一章【Redis从入门到精通(二)Redis的数据类型和常见命令介绍】中学习了Redis的五种基本数据类型即String、Hash、List、Set、SortedSet类型及其常用的命令。 这一节学习Redis的两种Java客户端Jedis和SpringDataRedis。 第3章 Redis的Java客户端 3.1 Jedis客户端 Jedis是Redis的一个Java客户端旨在提高性能和易用性。 Jedis的官网地址https://github.com/redis/jedis。 3.1.1 快速使用 1创建一个maven项目引入jedis依赖 !--jedis-- dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion2.9.0/version /dependency !--单元测试-- dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversion5.7.0/versionscopetest/scope /dependency2编写单元测试 public class JedisTest01 {private Jedis jedis;Beforepublic void setUp() {// 1.建立连接jedis new Jedis(192.168.146.128, 6379);// 2.设置密码jedis.auth(123321);// 3.选择库jedis.select(0);}Testpublic void testJedis() {// 存入String类型数据String result jedis.set(myPro:user, 马老板);System.out.println(result result);// 获取String类型数据String user jedis.get(myPro:user);System.out.println(user user);// 存入Hash类型数据Long result2 jedis.hset(myPro:book, name, 《三体1地球往事》);System.out.println(result2 result2);// 获取Hash类型数据String name jedis.hget(myPro:book, name);System.out.println(name name);}Afterpublic void cleanUp() {if(jedis ! null) {jedis.close();}} }3执行单元测试 result OK user 马老板 result2 1 name 《三体1地球往事》在桌面客户端查看数据 3.1.2 连接池 Jedis本身是线程不安全的并且频繁地创建和销毁连接会有性能损耗因此推荐使用Jedis连接池代替Jedis直连。 下面创建一个Jedis连接工厂保存Jedis连接池 public class JedisConnectionFactory {private static JedisPool jedisPool;static {// 配置连接池JedisPoolConfig jedisPoolConfig new JedisPoolConfig();// 最大连接数jedisPoolConfig.setMaxTotal(8);// 最大空闲连接数jedisPoolConfig.setMaxIdle(8);// 最小空现连接数jedisPoolConfig.setMinIdle(0);// 连接用尽后最大等待时间毫秒jedisPoolConfig.setMaxWaitMillis(1000);// 创建连接池对象参数分别是配置信息、服务端IP、端口、超时时间毫秒、密码jedisPool new JedisPool(jedisPoolConfig, 192.168.146.128, 6379, 1000, 123321);}public static Jedis getJedis() {return jedisPool.getResource();} }在单元测试中可以改成从连接池中获取Jedis对象 Before public void setUp() {// 1.建立连接// jedis new Jedis(192.168.146.128, 6379);// 改用连接池方式获取Jedis对象jedis JedisConnectionFactory.getJedis();// 2.设置密码jedis.auth(123321);// 3.选择库jedis.select(0); }3.2 SpringDataRedis客户端 SpringData是Spring中的数据操作模块包含对各种数据库操作的集成其中对Redis的集成模块就叫做SpringDataRedis。 官网地址是https://spring.io/projects/spring-data-redis。 在官网文档中列出了SpringDataRedis的主要特点 提供了对不同Redis客户端的整合Lettuce和Jedis提供了RedisTemplate工具类来统一操作Redis支持Redis的发布订阅模型支持Redis哨兵模式和集群模式支持基于Lettuce的响应式编程支持基于JDK、JSON、字符串、Spring对象的数据序列化和反序列化支持基于Redis的JDK Collection实现 对开发人员来说最需要关注的是RedisTemplate工具类它封装了各种对Redis的操作API 3.2.1 快速使用 SpringBoot已经提供了对SpringDataRedis的支持因此可以通过SpringBoot项目类使用SpringDataRedis。 1创建一个SpringBoot项目引入相关依赖 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.11.RELEASE/version/parentgroupIdcom.star.redis/groupIdartifactIdredis_learning_spring/artifactIdversion1.0-SNAPSHOT/versiondependencies!--redis--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!--commons-pool--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependency!--json--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactId/dependency!--lombok--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!--test--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies /project2在src/test/resources目录下新建配置文件application.yml配置Redis相关信息 spring:redis:host: 192.168.146.128port: 6379password: 123321lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 10003在src/main/java目录下新建SpringBoot主启动类 SpringBootApplication public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);} }4在src/test/java目录下新建测试类RedisSpringTest编写单元测试 RunWith(SpringRunner.class) SpringBootTest(classes MyApp.class) public class RedisSpringTest {Autowiredprivate RedisTemplate redisTemplate;Testpublic void test() {// 添加String类型数据redisTemplate.opsForValue().set(mySpring:name, 孙悟空);// 获取String类型数据Object name redisTemplate.opsForValue().get(mySpring:name);System.out.println(name name);}}最终的项目结构如下 5执行单元测试 name 孙悟空3.2.2 自定义序列化 在上面的案例中redisTemplate.opsForValue().set()方法的两个参数的类型均为Object在写入Redis之前会把Object序列化为字节形式默认采用JDK序列化取出时又会反序列化。因此在Redis中保存的数据是这样的 缺点比较明显可读性差、内存占用较大。 为此可以通过自定义RedisTemplate的序列化方法解决这个问题。 在项目中新建一个配置类RedisConfig Configuration public class RedisConfig {Beanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory redisConnectionFactory) {// 创建RedisTemplate对象RedisTemplateString, Object redisTemplate new RedisTemplate();// 设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);// 创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer new GenericJackson2JsonRedisSerializer();// 设置Key的序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());// 设置Value的序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);// 返回return redisTemplate;} }新建一个实体对象User Data NoArgsConstructor AllArgsConstructor public class User {private String name;private Integer age;private Date birthday; }编写一个单元测试 Test public void testJson() {// 添加String类型数据User user new User(猪八戒, 500, new Date());redisTemplate.opsForValue().set(mySpring:user, user);// 获取String类型数据User user1 (User) redisTemplate.opsForValue().get(mySpring:user);System.out.println(user1); }执行单元测试 User(name猪八戒, age500, birthdaySun Mar 31 14:48:27 CST 2024)可见在将User对象存入Redis时会自动的序列化为JSON字符串查询时也会自动地反序列化为Java对象。整体可读性有了很大的提升。 但要注意序列化后的数据保存了Java对象对应的Class名称目的是为了查询时实现自动地反序列化但这会带来额外的内存开销。 3.2.3 StringRedisTemplate 使用JSON序列化器来处理Value值会将class信息写入Redis带来额外的内存开销。 要解决这个问题可以统一使用String序列化器也就是Key和Value值都只能使用String类型。这样意味着Java对象的序列化和反序列化需要手动实现。 这种用法比较普遍因此SpringDataRedis就已经提供了一个RedisTemplate的子类StringRedisTemplate它的Key和Value值都采用String类型的序列化方式。 源码org.springframework.data.redis.core.StringRedisTemplatepublic class StringRedisTemplate extends RedisTemplateString, String {public StringRedisTemplate() {setKeySerializer(RedisSerializer.string());setValueSerializer(RedisSerializer.string());setHashKeySerializer(RedisSerializer.string());setHashValueSerializer(RedisSerializer.string());} }在代码中可以直接使用StringRedisTemplate例如 RunWith(SpringRunner.class) SpringBootTest(classes MyApp.class) public class StringRedisTemplateTest {Autowiredprivate StringRedisTemplate stringRedisTemplate;private static final ObjectMapper mapper new ObjectMapper();Testpublic void testSaveUser() throws JsonProcessingException {User user new User(唐僧, 98, new Date());// 手动序列化String json mapper.writeValueAsString(user);// 写入数据stringRedisTemplate.opsForValue().set(mySpring:user:200, json);// 获取数据String jsonUser stringRedisTemplate.opsForValue().get(mySpring:user:200);// 手动反序列化User user1 mapper.readValue(jsonUser, User.class);System.out.println(user1);} }执行单元测试 User(name唐僧, age98, birthdaySun Mar 31 15:02:25 CST 2024)3.3 小结 第3章到此就学习完毕了本章的主题是Redis的Java客户端。回顾一下本章的学习的内容 (三)Jedis客户端、SpringDataRedis客户端 更多内容请查阅分类专栏Redis从入门到精通 第4章主要学习Redis实战项目短信登录。 感兴趣的读者还可以查阅我的另外几个专栏 SpringBoot源码解读与原理分析(已完结)MyBatis3源码深度解析(已完结)再探Java为面试赋能(持续更新中…)
http://www.zqtcl.cn/news/578735/

相关文章:

  • 网站解析后怎么解决方法淘宝网站建设方案模板
  • 淘宝客可以自己做网站推广吗营销网络建设怎么写
  • 上海高端网站制作广告设计培训课程
  • 互联网站平台有哪些建筑工程教育网官网
  • 广告传媒公司哪家好职场seo是什么意思
  • 番禺龙美村做网站博山区住房和城乡建设局网站
  • 山东网站建设xywlcnwordpress如何创建导航
  • 直接用ip访问网站网站开发常用字体
  • 江西省城乡建设培训网 官方网站杭州十大软件公司
  • 建设网站需要什么设备南昌购物网站制作
  • 做家具的网站工作单位怎么填
  • 福州建设银行官网招聘网站山西建设公司网站
  • 集团网站建设方案中卫网站推广制作
  • 射阳网站建设电商运营团队结构图
  • 有没有女的做任务的网站计算机网站开发专业
  • 怎么样开始做网站网站建设 营业执照 经营范围
  • 威海做网站网站建设方案书 模版
  • 泗阳做网站南昌建设
  • 做企业网站用什么软件深圳制作企业网站
  • 大连微信网站开发兰州网站建设模板
  • 建设项目安监备案网站外贸 网站 seo
  • 企慕网站建设网络推广合肥市网站制作
  • 做空比特币网站大气简约企业网站模板免费下载
  • 坪山网站建设行业现状做网站能月入10万
  • 个人网站有什么内容广西网站建设推广
  • 安徽教育云网站建设网站seo诊断的主要内容
  • 网站建设例子开发工具宏怎么使用
  • 新乡做网站公司哪个地区网站建设好
  • 网站模板怎么编辑网站定制化
  • 利于优化的网站网络科技公司怎么赚钱