首页>>后端>>SpringBoot->SpringBoot基础之集成使用Redis

SpringBoot基础之集成使用Redis

时间:2023-11-30 本站 点击:0

前言

Redis是比较著名的NoSql数据库,主要用于存放KV型数据等非关系行数据,但随着Redis的发展,它所能做的功能越来越多,能够实现的场景包括但不限于:缓存,配置,排行榜,计数,分布式锁,限流,消息队列等等,当然我们提到他最多的时候是应用在缓存场景,因为redis是为缓存而生.

集成

添加Maven包

这里使用了spring-boot-starter-data-redis,它自带的客户端连接工具是lettuce.

当然你也可以使用redisson或者jedis,不过需要先排除lettuce,再引入对应的包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

如果使用FastJson序列化 也需要引入fastjson ,你喜欢Jackson的话,不想写?

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.70</version></dependency>

application.yml配置

spring:redis:database:0#选择第一个数据库,可选0-15host:127.0.0.1port:6379password:#无密码留空,有密码则设置密码

添加配置类

@ConfigurationpublicclassMyRedisConfig{/***指定FastJson序列化*@paramredisConnectionFactory*@return*/@BeanpublicRedisTemplateredisTemplate(RedisConnectionFactoryredisConnectionFactory){RedisTemplate<Object,Object>template=newRedisTemplate();template.setConnectionFactory(redisConnectionFactory);GenericFastJsonRedisSerializerjsonRedisSerializer=newGenericFastJsonRedisSerializer();template.setDefaultSerializer(jsonRedisSerializer);template.setKeySerializer(jsonRedisSerializer);template.setValueSerializer(jsonRedisSerializer);returntemplate;}}

这里使用的是FastJson序列化,并指定默认序列化方式,Key序列化方式和Value序列化方式都是FastJson.

在业务中注入方式为

@AutowiredprivateRedisTemplate<String,Object>redisTemplate;

其中<String,Object>部分可以根据序号更换为其他类型

测试使用

一定要测试呀,我同事项目组,项目上线之后发现redis配置有问题,线程不释放,用上一段时间就卡死...

单线程 存储 100000 数据测试 : 取第二次测试结果耗时 17834 ms

@GetMapping("/string1")publicRstring1(){longstart=System.currentTimeMillis();for(inti=0;i<100000;i++){Stringuuid=UUID.randomUUID().toString();redisTemplate.opsForValue().set(uuid,uuid);}longend=System.currentTimeMillis();returnR.success("redisTemplate单线程,存储100000key:需要时间",end-start);}

100线程 并发 存储 100000 数据测试 :取第二次测试结果耗时 2795 ms

@GetMapping("/string100")publicResultVostring100()throwsInterruptedException{redisTemplate.hasKey("123");CountDownLatchcountDownLatch=newCountDownLatch(100000);ExecutorServicepool=Executors.newFixedThreadPool(100);longstart=System.currentTimeMillis();for(inti=0;i<100000;i++){pool.execute(()->{Stringuuid=UUID.randomUUID().toString();redisTemplate.opsForValue().set(uuid,uuid);countDownLatch.countDown();});}countDownLatch.await();longend=System.currentTimeMillis();returnResultVo.success("redisTemplate100线程并发,存储100000Key需要时间",end-start);}

管道 存储 100000 数据测试 :取第二次测试结果耗时 2071 ms

@GetMapping("/stringPipe")publicResultVostringPipe()throwsInterruptedException{longstart=System.currentTimeMillis();redisTemplate.executePipelined((RedisCallback)redisConnection->{for(inti=0;i<100000;i++){byte[]uuid=UUID.randomUUID().toString().getBytes();redisConnection.set(uuid,uuid);}returnnull;},redisTemplate.getDefaultSerializer());longend=System.currentTimeMillis();returnResultVo.success("redisTemplate管道,存储100000Key需要时间",end-start);}

作者:ZOUZDC

链接:https://juejin.cn/post/7028963866063306760


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