redis简介
redis作为一种非关系型数据库,读写十分快,利用非常宽泛,它采纳key-value的模式存储数据,value罕用的五大数据类型有string(字符串),list(链表),set(汇合),zset(有序汇合)和hash(哈希表)。
redis的个性决定了它的性能,它能够用来做以下这些事件!
- 排行榜,利用zset能够不便的实现排序功能
- 计数器,利用redis中原子性的自增操作,能够统计到浏览量,点赞量等性能
- 简略音讯队列,list存储构造,满足先进先出的准则,能够应用lpush/rpop或rpush/lpop实现简略音讯队列
- session共享,分布式系统中,能够利用redis实现session共享。spring官网提供的分布式解决方案Spring Session就是利用redis 实现的。
Spring Boot对redis也实现自动化拆卸,应用十分不便。
Spring Boot整合redis
1. 引入redis依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency></dependencies>
2. 配置redis相干信息
spring: redis: # redis库 database: 0 # redis 服务器地址 host: localhost # redis 端口号 port: 6379 # redis 明码 password: # 连贯超时工夫(毫秒) timeout: 1000 lettuce: pool: # 连接池最大链接数(正数示意没有限度) max-active: 8 # 连接池最大阻塞等待时间(正数示意没有限度) max-wait: -1 # 连接池最大闲暇连接数 max-idle: 8 # 连接池最小闲暇连接数 min-idle: 0
3. 操作redis
SpringBoot提供了两个bean来操作redis,别离是RedisTemplate
和 StringRedisTemplate
,这两者的次要区别如下。
RedisTemplate
应用的是JdkSerializationRedisSerializer
存入数据会将数据先序列化成字节数组而后在存入Redis数据库。
StringRedisTemplate
应用的是StringRedisSerializer。
上面一起来看看成果:
@RestControllerpublic class RedisDemo { @Autowired private RedisTemplate redisTemplate; @Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("redisTmeplateData") public void redisTemplateData(){ redisTemplate.opsForValue().set("name","Java旅途"); } @GetMapping("stringRedisTemplateData") public void stringRedisTemplateData(){ stringRedisTemplate.opsForValue().set("desc","保持分享java技术栈"); }}
第一个办法存入的数据如下图:
第二个办法存入的数据如下图:
因为RedisTemplate是序列化成字节数组存储的,因而在redis客户端的可读性并不好。
主动缓存
@Cacheable
能够标记在一个办法上,也能够标记在一个类上。当标记在一个办法上时示意该办法是反对缓存的,当标记在一个类上时则示意该类所有的办法都是反对缓存的。
如果增加了@Cacheable
注解,那么办法被调用后,值会被存入redis,下次再调用的时候会间接从redis中取值返回。
@GetMapping("getStudent")@Cacheable(value = "student:key")public Student getStudent(){ log.info("我不是缓存,我是new的对象!"); Student student = new Student("Java旅途",26); return student;}
记得要开启缓存,在启动类加上@EnableCaching
注解
拜访下面的办法,如果不打印日志,则是从缓存中获取的值。
封装redisUtils
RedisTemplate提供了很多办法来操作redis,然而找起来比拟麻烦,为了更好的操作redis,个别会封装redisUtils来满足业务开发。这里简略封装几个做个示例,如果开发中有需要能够本人封装。
public class RedisUtils { @Autowired private RedisTemplate redisTemplate; /** * 一般存入 * @param key * @param value * @return */ public boolean set(String key,Object value){ try { redisTemplate.opsForValue().set(key,value); return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 一般获取key * @param key * @return */ public Object get(String key){ return key == null ? null : redisTemplate.opsForValue().get(key); } /** * 存入key,设置过期时长 * @param key * @param value * @param time * @return */ public boolean set(String key,Object value,long time){ try { if(time > 0){ redisTemplate.opsForValue().set(key,value,time, TimeUnit.SECONDS); }else{ redisTemplate.opsForValue().set(key,value); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 判断key是否存在 * @param key * @return */ public boolean exists(String key){ try { return redisTemplate.hasKey(key); }catch (Exception e){ e.printStackTrace(); return false; } } /** * 删除key * @param key */ public void del(String key){ try { if(key != null && key.length() > 0){ redisTemplate.delete(key); } }catch (Exception e){ e.printStackTrace(); } }}
此是spring-boot-route系列的第十二篇文章,这个系列的文章都比较简单,次要目标就是为了帮忙首次接触Spring Boot 的同学有一个零碎的意识。本文已收录至我的github,欢送各位小伙伴star
!
github:https://github.com/binzh303/s...
点关注、不迷路
如果感觉文章不错,欢送关注、点赞、珍藏,你们的反对是我创作的能源,感激大家。
如果文章写的有问题,请不要悭吝,欢送留言指出,我会及时核查批改。
如果你还想更加深刻的理解我,能够微信搜寻「Java旅途」进行关注。回复「1024」即可取得学习视频及精美电子书。每天7:30准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!