今天我们要在原来搭建的框架基础上集成redis数据库。

redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型,类似于Java中的map)。Redis基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。

首先我们要在本地下载并安装redis数据库,redis数据库的安装网上有太多的例子,这里我就不再赘述了,那么怎么把本地安装好了的redis数据库集成到现有的框架中呢?

1.在provider模块下的pom.xml中添加redis数据库的依赖:

<spring-boot-starter-redis-version>1.4.7.RELEASE</spring-boot-starter-redis-version>

  <!-- Spring Boot Redis 依赖 -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-redis</artifactId>
   <version>${spring-boot-starter-redis-version}</version>
  </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.0.9.RELEASE</version>
</dependency>
这里要注意的是版本的兼容问题,我刚开始org.springframework.data的版本不是2.0.9,而是1.8.0,这个版本和我现在原有的框架不兼容,报错信息如下:

网上找了好久,说的五花八门,后面我把org.springframework.data的版本改为比较新的2.0.9,错误没了,所以有时候遇到这种兼容问题是最头痛的,你也可以在我的框架中试一下,把版本改为1.8.0。 [/调皮]

2.在项目的provider模块下的application.properties配置文件中添加redis的配置,配置内容如下:

## Redis 配置
## Redis数据库索引(默认为0)
spring.redis.database=0
## Redis服务器地址
spring.redis.host=127.0.0.1
## Redis服务器连接端口
spring.redis.port=6379
## Redis服务器连接密码(默认为空)
spring.redis.password=123456
## 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
## 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
## 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
## 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
## 连接超时时间(毫秒)
spring.redis.timeout=0

如果不在application.properties配置文件中配置,也可以在application.yml配置文件中配置,配置内容如下:
server:
port: 8082
servlet:
context-path: /
spring:
datasource:
name: test
url: jdbc:mysql://127.0.0.1:3306/springdb?useUnicode=true&characterEncoding=utf8
username: root
password: root
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20 ## Redis 配置
## Redis数据库索引(默认为0)
redis:
#数据库索引
database: 0
host: 127.0.0.1
port: 6379
password: 123456
jedis:
pool:
#最大连接数
max-active: 8
#最大阻塞等待时间(负数表示没限制)
max-wait: -1
#最大空闲
max-idle: 8
#最小空闲ap
min-idle: 0
#连接超时时间(毫秒)
timeout: 10000 # mybatis:
# type-aliases-package: com.lj.common.domin ## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
mybatis:
mapper-locations: classpath:mapping/*.xml #注意:一定要对应mapper映射xml文件的所在路径
type-aliases-package: com.lj.common.domin #注意:对应实体类的路径

但是这里要注意前面已经在application.yml中配置了mysql数据库,而spring只能有一个,不能重复,所以这次的redis配置要和mysql并齐配置,否则会报错。关于redis数据库的密码,你可以在本地的redis数据库源文件中有一个名字叫redis.windows.conf的配置文件中查看,如下:

这个也就是你的密码了。

接下来就是分别在controller层、service层、mapper层编写逻辑代码了:

UserController中添加增删改查方法:

@GetMapping("getUserById")
public User getUserById(){
System.out.println("进来了!!!!!!!!!!!!!!!!");
System.out.println(userService.hashCode()+"!!!!!!!!!!!!!!!!");
int id = 3;
return userService.getUserById(id);
} @GetMapping("saveUser")
public void saveUser(){
System.out.println("进来了!!!!!!!!!!!!!!!!");
System.out.println(userService.hashCode()+"!!!!!!!!!!!!!!!!");
User user = new User();
user.setName("赵洋");
user.setAge(12);
user.setSex("女");
int i = userService.saveUser(user);
System.out.println("是否保存成功?-------------"+i);
} @GetMapping("updateUser")
public void updateUser(){
System.out.println("进来了!!!!!!!!!!!!!!!!");
System.out.println(userService.hashCode()+"!!!!!!!!!!!!!!!!");
User user = new User();
user.setUserId(1);
user.setName("赵洋");
user.setAge(13);
user.setSex("男");
int i = userService.updateUser(user);
System.out.println("是否保存成功?-------------"+i);
} @GetMapping("deleteUser")
public void deleteUser(){
System.out.println("进来了!!!!!!!!!!!!!!!!");
System.out.println(userService.hashCode()+"!!!!!!!!!!!!!!!!");
int id = 3;
int i = userService.deleteUser(id);
System.out.println("是否保存成功?-------------"+i);
}
UserService中添加增删改查接口:
User getUserById(int id);
int saveUser(User user);
int updateUser(User user);
int deleteUser(int id);
在UserImpl中添加接口的实现类:
 /**
* 获取user逻辑:
* 如果缓存存在,从缓存中获取user信息
* 如果缓存不存在,从 DB 中获取user信息,然后插入缓存
*/
@Override
public User getUserById(int id) {
//从缓存中获取城市信息
String key = "user_"+id;
ValueOperations<String,User> operations = redisTemplate.opsForValue(); //缓存存在
boolean hasKey = redisTemplate.hasKey(key);
User u = operations.get(key);
System.out.println("是否有缓存:"+hasKey+" 缓存中的值是:"+u);
if(hasKey){
User user = operations.get(key);
LOGGER.info("UserImpl.updateUser() : 从缓存中获取了user >> " + user.toString());
return user;
}
//从数据库中获取user数据
User user = userMapper.getUserById(id); //插入缓存
operations.set(key, user, 4, TimeUnit.HOURS);
LOGGER.info("UserImpl.findUserById() :user插入缓存 >> " + user.toString());
return user;
} public int saveUser(User user){
return userMapper.saveUser(user);
} /**
* 更新user逻辑:
* 如果缓存存在,从缓存中删除user信息
* 如果缓存不存在,不操作
*/
public int updateUser(User user){
int ret = userMapper.updateUser(user); //缓存存在,删除缓存
String key = "user_" + user.getUserId();
boolean haskey = redisTemplate.hasKey(key);
if (haskey){
redisTemplate.delete(key);
LOGGER.info("UserImmpl.updateUser() : 从缓存中删除user >> " + user.toString());
}
return ret;
} /**
* 删除user逻辑:
* 如果缓存存在,从缓存中删除user信息
* 如果缓存不存在,不操作
*/
public int deleteUser(int id){
int ret = userMapper.deleteUser(id); //缓存存在,删除缓存
String key = "user_" + id;
System.out.println("key的值为: " +key);
boolean haskey = redisTemplate.hasKey(key);
ValueOperations<String,User> operations = redisTemplate.opsForValue();
User u = operations.get(key);
System.out.println("是否有缓存:"+haskey+" 缓存中的值是:"+u);
if (haskey){
LOGGER.info("UserImmpl.updateUser() : 从缓存中删除user >> " + operations.get(key));
redisTemplate.delete(key);
}
return ret;
}
 
然后是在UserMapper中添加接口:
User getUserById(int id);

int saveUser(User user);

int updateUser(User user);

int deleteUser(int id);
最后是在UserMapper.xml中添加sql语句:
<select id="getUserById" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from u_user t
where t.userId = #{userId,jdbcType=INTEGER}
</select> <insert id="saveUser" parameterType="com.lj.common.domin.User" >
insert into u_user
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="userId != null" >
userId,
</if>
<if test="name != null" >
name,
</if>
<if test="age != null" >
age,
</if>
<if test="sex != null" >
sex,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="userId != null" >
#{userId,jdbcType=INTEGER},
</if>
<if test="name != null" >
#{name,jdbcType=VARCHAR},
</if>
<if test="age != null" >
#{age,jdbcType=INTEGER},
</if>
<if test="sex != null" >
#{sex,jdbcType=VARCHAR},
</if>
</trim>
</insert> <update id="updateUser" parameterType="com.lj.common.domin.User" >
UPDATE u_user
SET
<if test="name != null" >
name = #{name},
</if>
<if test="age != null" >
age = #{age},
</if>
<if test="sex != null" >
sex = #{sex}
</if>
WHERE
userId = #{userId}
</update> <delete id="deleteUser" parameterType="java.lang.Integer">
delete from
u_user
where
userId = #{userId}
</delete>
现在所有的配置和逻辑代码都写完了,来测试一下吧:
先查询,输入网址:http://localhost:8081/getUserById

这时缓存已经存进redis数据库,再次访问该网址,显示如下:

说明这次是直接从redis数据库中捞取数据的,
剩下还有增删改的测试都是可以的,这里就不一一进行展示了。
至此,redis集成到该框架成功!!!
该项目框架我已经上传到了CSDN上,网址如下:https://download.csdn.net/download/weixin_38340967/10649806
该项目框架我还会继续更新的,未完待续。。。

搭建SpringBoot+dubbo+zookeeper+maven框架(三)的更多相关文章

  1. 搭建SpringBoot+dubbo+zookeeper+maven框架(二)

    上一篇文章是关于搭建SpringBoot+dubbo+zookeeper+maven框架的,但是里面的功能还不够完善,今天就日志管理方面做一些改善. 下了demo的网友可能会发现项目在启动时会有警告: ...

  2. 搭建SpringBoot+dubbo+zookeeper+maven框架(一)

    这几天项目还没来,所以就自己试着参考网上的一些资料,搭建了一个SpringBoot+dubbo+zookeeper+maven框架,网上参考的很多资料照着他们一步一步搭建,最后很多都运行不通,很是郁闷 ...

  3. 搭建SpringBoot+dubbo+zookeeper+maven框架(四)

    今天我们完成框架的thymeleaf模板显示页面功能,页面的用户登陆,密码的AES加密解密,输错3次进行验证码验证功能,东西可能比较多,这个是我这两天在网上结合各种资源整合出来的,基本功能都已经实现, ...

  4. SpringBoot+Dubbo+ZooKeeper+Maven入门实践

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11798626.html 注*** 本实例为仅适合初学者,关于dubbo和springboot以 ...

  5. springboot+dubbo+zookeeper+mybatis

    参考地址:https://www.cnblogs.com/gaopengfirst/p/9555240.html 首先创建一个maven项目: 再在该父项目中创建3个module,分别是:provid ...

  6. SpringBoot + Dubbo + zookeeper 搭建简单分布式服务

    SpringBoot + Dubbo + zookeeper 搭建简单分布式服务 详细操作及源码见: https://github.com/BillyYangOne/dubbo-springboot

  7. 搭建一个dubbo+zookeeper平台

    本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...

  8. 从头开始搭建一个dubbo+zookeeper平台

    本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...

  9. 高可用架构的实现--dubbo+zookeeper+maven+tomcat

    最近在做分布式的服务架构搭建,因为自己确实很喜欢搞这种技术类的研究,所以在公司需要的时候主动承担了这项光荣而艰巨的任务.公司搭建的架构主要目的是需要支持后端接口的多用户的高并发访问,希望能够达到每秒并 ...

随机推荐

  1. Javascript 对象 - 数学对象

    数学对象 JavaScript中提供了math对象,math对象包含一些常用的属相和方法.Math对象与Array对象.String对象.Data对象不同,没有构造函数,因此不能创建Math对象.可直 ...

  2. Android Studio: Error:Cannot locate factory for objects of type DefaultGradleConnector, as ConnectorServiceRegistry

    将别人的项目导入自己的环境下出现的问题. Gradle refresh failed; Error:Cannot locate factory for objects of type DefaultG ...

  3. 运行 python *.py 文件出错,如:python a.py

    运行 python *.py 文件出错,如:python a.py(下图) 原因:没有安装web.py 解决:下载并安装 网址:http://webpy.org/install#install  (h ...

  4. phpstudy 上怎么运行 thinkPHP ?

    最近在学习 thinkPHP ,但是本地使用的是 phpstudy ,就想在 phpstudy 中使用 thinkPHP ,这样我的环境就不用再改变也可以学习. 首先,先要 下载 thinkPHP , ...

  5. ERP口碑后付关于如何设置后厨小票打印时间的问题解决方法

    1. 2.

  6. ERROR 1044 (42000): Access denied for user 'root'@'localhost'

    从供应商那边接手一个MySQL数据库(数据库版本为5.7.21 MySQL Community Server (GPL)),在创建账号时遇到了"ERROR 1044 (42000): Acc ...

  7. java笔记----面试题总结(一)【转】

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...

  8. selenium-获取一组数组进行操作(七)

    selenium-获取一组数组进行操作 以  纵横中文网  中获取24小时畅销榜的书单为例 此文仅做 selenium 在自动化测试中怎么获取一组数据进行说明,不做网络爬虫解释 当然,使用爬虫得到本文 ...

  9. 上传github文件及所出现的问题

    上传github所发现的问题 准备工作 使用 git bush 输入下面的命令 git config --global user.email "you@example.com" g ...

  10. TNS-12535: TNS:operation timed out

    AWS数据库云服务器出现了连接超时的错误,于是查看相关时段的alert日志,发现了如下的错误: **************************************************** ...