Redis是比较著名的NoSql数据库,主要用于存放KV型数据等非关系行数据,但随着Redis的发展,它所能做的功能越来越多,能够实现的场景包括但不限于:缓存,配置,排行榜,计数,分布式锁,限流,消息队列等等,当然我们提到他最多的时候是应用在缓存场景,因为redis是为缓存而生.
集成 添加Maven包这里使用了spring-boot-starter-data-redis,它自带的客户端连接工具是lettuce.
当然你也可以使用redisson或者jedis,不过需要先排除lettuce,再引入对应的包
复制代码 org.springframework.boot spring-boot-starter-data-redis
如果使用FastJson序列化 也需要引入fastjson ,你喜欢Jackson的话,不想写
application.yml配置复制代码 com.alibaba fastjson1.2.70
spring: redis: database: 0 #选择第一个数据库,可选0-15 host: 127.0.0.1 port: 6379 password: #无密码留空 ,有密码则设置密码 复制代码添加配置类
@Configuration public class MyRedisConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate
这里使用的是FastJson序列化,并指定默认序列化方式,Key序列化方式和Value序列化方式都是FastJson.
在业务中注入方式为
@Autowired private RedisTemplateredisTemplate; 复制代码
其中
一定要测试呀,我同事项目组,项目上线之后发现redis配置有问题,线程不释放,用上一段时间就卡死...
单线程 存储 100000 数据测试 : 取第二次测试结果耗时 17834 ms@GetMapping("/string1") public R string1() { long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String uuid = UUID.randomUUID().toString(); redisTemplate.opsForValue().set(uuid, uuid); } long end = System.currentTimeMillis(); return R.success("redisTemplate单线程,存储 100000 key:需要时间", end - start); } 复制代码100线程 并发 存储 100000 数据测试 :取第二次测试结果耗时 2795 ms
@GetMapping("/string100") public ResultVo string100() throws InterruptedException { redisTemplate.hasKey("123"); CountDownLatch countDownLatch = new CountDownLatch(100000); ExecutorService pool = Executors.newFixedThreadPool(100); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { pool.execute(() -> { String uuid = UUID.randomUUID().toString(); redisTemplate.opsForValue().set(uuid, uuid); countDownLatch.countDown(); }); } countDownLatch.await(); long end = System.currentTimeMillis(); return ResultVo.success("redisTemplate 100线程 并发,存储 100000 Key 需要时间", end - start); } 复制代码管道 存储 100000 数据测试 :取第二次测试结果耗时 2071 ms
@GetMapping("/stringPipe") public ResultVo stringPipe() throws InterruptedException { long start = System.currentTimeMillis(); redisTemplate.executePipelined((RedisCallback) redisConnection ->{ for (int i = 0; i < 100000; i++) { byte[] uuid = UUID.randomUUID().toString().getBytes(); redisConnection.set(uuid, uuid); } return null; }, redisTemplate.getDefaultSerializer()); long end = System.currentTimeMillis(); return ResultVo.success("redisTemplate 管道 ,存储 100000 Key 需要时间", end - start); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)