Springboot整合NoSQL(Redis)场景
1、Redis简介
Redis官网:https://redis.io/
Redis中文官方网站:http://www.redis.cn/
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
2、Redis自动配置
<!--引入redis场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
自动配置:
- RedisAutoConfiguration 自动配置类。RedisProperties 属性类 --> spring.redis.xxx是对redis的配置
- 连接工厂是准备好的。LettuceConnectionConfiguration、JedisConnectionConfiguration
- 自动注入了RedisTemplate<Object, Object> : xxxTemplate;
- 自动注入了StringRedisTemplate;k:v都是String
- key:value
- 底层只要我们使用 StringRedisTemplate、RedisTemplate就可以操作redis
3、springboot项目中使用Redis(使用本地redis)
3.1、引入redis场景启动器依赖
<!--引入redis场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.2、springBoot配置文件配置redis信息
# redis配置:只需配置url即可,因为url带有 host, port, and password这些信息
# URL. Overrides host, port, and password. User is ignored. Example:
# * redis://user:password@example.com:6379
# redis://用户名:密码@公网地址:6379
# 如果redis没有账号密码,上边url中将用户名密码去掉即可
# 在这里我使用的是本地redis
redis:
url: redis://127.0.0.1:6379
3.3、首先启动本地redis
启动本地redis服务器
启动成功
启动redis客户端管理工具
3.4、编写代码测试springboot集成redis是否成功–使用Lettuce连接工厂操作redis
查看控制台
查看redis客户端工具
3.5、使用jedis连接工厂操纵redis
1、引入依赖:
<!--引入redis场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--导入jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2、配置文件中配置指定使用jedis连接工厂:
# 指定使用jedis连接工厂操作redis
spring:
redis:
url: redis://127.0.0.1:6379
client-type: jedis
# jedis.pool.max-active : 设置最大池子大小
jedis:
pool:
max-active: 8
4、小功能:使用redis实现在系统首页计数
记录用户访问某个请求的次数,用redis存放数据,效果图如下所示
1、编写一个拦截器实现HandlerInterceptor接口,用于拦截用户的请求url,并将数据存放到redis中
@Component
public class RedisUrlCountInterceptor implements HandlerInterceptor {
@Autowired
StringRedisTemplate redisTemplate;
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler)
throws Exception {
//获取当前访问的请求名
String uri = request.getRequestURI();
//默认每次访问当前uri就会加1
redisTemplate.opsForValue().increment(uri);
return true;
}
}
2、拦截器注册到容器中(实现WebMvcConfiguration的addInterceptors方法)
/**
* 拦截器编写规则:
* 1、编写一个拦截器实现HandlerInterceptor接口
* 2、拦截器注册到容器中(实现WebMvcConfiguration的addInterceptors方法)
* 3、指定拦截器规则【如果是拦截所有,静态资源也会拦截】
*/
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
/*
* Filter. Interceptor几乎拥有相同的功能?
* 1、Filter是Servlet定义的原生组件。好处,脱离Spring应用也能使用本
* 2、interceptor是Spring定义的接口。
*/
@Autowired
RedisUrlCountInterceptor redisUrlCountInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(redisUrlCountInterceptor)
//添加要拦截的请求。此处意思是拦截所有请求,包括静态资源
.addPathPatterns("/**")
//要放行的请求
.excludePathPatterns("/", "/login", "/css/**", "/fonts/**", "images/**", "/js/**");
}
}
3、由于数据显示在main.html页面的
- 所以创建控制层类,咋该类中创建访问main页面的方法。
- 并在该方法很脏获取redis中存放的数据
- 将获取的数据返回给前端
4、在前端获取数据