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。
上面一起来看看成果:
@RestController
public 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 准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!