maven+mysql+con_ssm+redis+maven集成使用Jedis客户端demo
上次写完了一个demo 之后想把redis技术用在项目中,结果是频频报错。后来才发现原来我把两种实现方法混为一谈了,这次我向大家介绍第二种,我结合项目写的redis-demo。希望大家哆嗦多多收益,在看代码之前,我觉得有必要跟讲解一下 jedis 的运行原理:
1.插入一条数据 :
2.查询刚才插入的方法:
3.第二次查询:
4.修改刚才插入的数据:
5.查询修改过的数据:
好了,了解了运行机制,我们运行代码就会明白很多。
在pom.xml文件中:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
com.basessm
basessm
war
0.0.1-SNAPSHOT
basessm Maven Webapp
http://maven.apache.org
4.0.2.RELEASE
3.2.6
1.7.7
1.2.17
org.mybatis
mybatis-ehcache
1.0.0
org.springframework.data
spring-data-redis
1.0.2.RELEASE
org.apache.commons
commons-lang3
3.5
redis.clients
jedis
2.1.0
junit
junit
4.11
test
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-oxm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.2.2
javax
javaee-api
7.0
mysql
mysql-connector-java
5.1.30
commons-dbcp
commons-dbcp
1.2.2
jstl
jstl
1.2
log4j
log4j
${log4j.version}
com.alibaba
fastjson
1.1.41
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.codehaus.jackson
jackson-mapper-asl
1.9.13
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.4
commons-codec
commons-codec
1.9
org.aspectj
aspectjrt
1.6.12
org.aspectj
aspectjweaver
1.6.12
cglib
cglib
2.2
basessm
在application.xml文件中: 重点看 红色标注的地方
在mybatis-conf.xml文件中。开启全局缓存:<?xml version="1.0" encoding="UTF-8" ?>
/p>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
在UserMapper.xml文件中:<?xml version="1.0" encoding="UTF-8"?>
/p>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
INSERT INTO user (id,username,password) VALUES (#{id},#{username},#{password})
DELETE FROM user WHERE id=#{id}
update user
set id=#{id}
,username = #{username}
,password = #{password}
WHERE id=#{id}
SELECT id,username,password FROM user WHERE id=#{id}
SELECT id,username,password FROM user where username=#{username} and password=#{password}
SELECT id,username,password FROM user
创建RedisCache,实现Cache接口:package com.basessm.redis.core1;
import java.io.Serializable;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.ibatis.cache.Cache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.jedis.JedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import com.basessm.redis.core.SerializeUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;
public class RedisCache implements Cache {
/**
* 日志
*/
private static final Logger LOGGER = LoggerFactory.getLogger(RedisCache.class);
private static final long serialVersionUID = -8198240627840132613L;
/**
* The {@code ReadWriteLock}.
*/
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
/**
* Jedis客户端
*/
@Autowired
private Jedis redisClient = createClient();
private String id;
public RedisCache(final String id) {
if (id == null) {
throw new IllegalArgumentException("必须传入ID");
}
System.out.println("............MybatisRedisCache:id=" + id);
LOGGER.debug("MybatisRedisCache:id=" + id);
this.id = id;
}
@Override
public void clear() {
redisClient.flushDB();
}
@Override
public String getId() {
return this.id;
}
@Override
public Object getObject(Object key) {
byte[] ob = redisClient.get(SerializeUtil.serialize(key.toString()));
if (ob == null) {
return null;
}
Object value = SerializeUtil.unSerialize(ob);
LOGGER.debug("获取的键值对>>>>>>>>>>>>>>>>>>>>>>>>getObject:" + key + "=" + value);
return value;
}
@Override
public ReadWriteLock getReadWriteLock() {
return readWriteLock;
}
@Override
public int getSize() {
return Integer.valueOf(redisClient.dbSize().toString());
}
@Override
public void putObject(Object key, Object value) {
LOGGER.debug("存入的键值对>>>>>>>>>>>>>>>>>>>>>>>>putObject:" + key + "=" + value);
redisClient.set(SerializeUtil.serialize(key.toString()), SerializeUtil.serialize(value));
}
@Override
public Object removeObject(Object key) {
return redisClient.expire(SerializeUtil.serialize(key.toString()), 0);
}
protected static Jedis createClient() {
try {
JedisPool pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1",6379,8000,"foobared");
return pool.getResource();
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("初始化连接池错误");
}
}
在项目运行之前启动 redis服务,
JedisPool pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1",6379,8000,"foobared");
分别是连接IP,端口,连接启动时长,密码。
创建序列化类SerializeUtil:package com.basessm.redis.core;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializeUtil {
/**
*
* 序列化
*/
public static byte[] serialize(Object obj) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
try {
// 序列化
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
byte[] byteArray = baos.toByteArray();
return byteArray;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
*
* 反序列化
*
* @param bytes
* @return
*/
public static Object unSerialize(byte[] bytes) {
ByteArrayInputStream bais = null;
try {
// 反序列化为对象
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
创建控制类:package com.basessm.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.basessm.model.User;
import com.basessm.service.UserServiceI;
@Controller
@RequestMapping("redisTest")
public class RedisTestCon {
@Autowired
private UserServiceI userService;
@RequestMapping("/addUser")
public void addUser(){
User user = new User();
user.setId(6);
user.setUsername("tom6");
user.setPassword("123456");
int a = userService.add(user);
System.out.println("添加用户测试:" + a);
}
@RequestMapping("/selUser")
@ResponseBody
public User selUser(){
User user = userService.selById(5);
System.out.println("第一次 :" + user.getUsername());
User user2 = userService.selById(5);
System.out.println("第二次 :" + user2.getUsername());
return user;
}
@RequestMapping("/sel")
@ResponseBody
public User sel(){
User user = userService.selById(4);
System.out.println("第一次 :" + user.getUsername());
User user2 = userService.selById(4);
System.out.println("第二次 :" + user2.getUsername());
return user;
}
/**
* 修改数据,
* @return
*/
@RequestMapping("/updUser")
@ResponseBody
public User updUser(){
User user = new User();
user.setId(5);
user.setUsername("tom5");
user.setPassword("alice");
int su = userService.updat(user);
System.out.println("su:" + su);
System.out.println("获取修改后的:" + user.getPassword());
User user2 = userService.selById(5);
System.out.println("获取修改后的查询 :" + user2.getUsername());
return user;
}
}
在Controller 里面直接测试,注意看后台日志
关于后台日志的配置:log4.properties:log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.R.File=../logs/service.log
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.logger.com.ibatis = debug
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debug
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner = debug
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debug
#log4j.logger.java.sql.Connection = debug
log4j.logger.java.sql.Statement = debug
log4j.logger.java.sql.PreparedStatement = debug
log4j.logger.java.sql.ResultSet =debug
如果看的不是太明白,推荐大家一个原文网址,里面有详细配置后台打印日志,个人觉得比较好,推荐给大家:
http://blog.csdn.net/win7system/article/details/52014413
日志配置好后,别忘记加入web.xml文件里<?xml version="1.0" encoding="UTF-8"?>
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
Archetype Created Web Application
contextConfigLocation
classpath:spring-mybatis.xml,classpath:applicationContext.xml
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
true
encoding
UTF-8
encodingFilter
/*
log4jConfigLocation
classpath:log4.properties
org.springframework.web.util.Log4jConfigListener
org.springframework.web.context.ContextLoaderListener
org.springframework.web.util.IntrospectorCleanupListener
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
true
SpringMVC
/
/index.jsp
好了 启动一下项目看看。如有疑问欢迎询问,写的不好的地方,也请大家多多见谅,勿喷,我只是记录一下,怕自己以后忘记!能帮到最好,帮不到请忽略,谢谢
maven+mysql+con_ssm+redis+maven集成使用Jedis客户端demo相关推荐
- Redis集成到Maven工程(Jedis客户端)
1.说明 Redis不仅可以使用命令行操作, 也支持大部分主流编程语言的客户端, 本文介绍Java客户端Jedis的使用, Jedis API提供了完整的Redis命令, 能够和Redis命令行一一对 ...
- 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo
前言:我这里搭建好eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo.新手快速上手直接看demo. 最后处提供完整高质量de ...
- SSM+nginx+tomcat+maven+mysql+redis环境搭建及工程全套配置,实现前后端动静分离
目录 前言 服务器环境搭建 windows开发环境 SSM搭建 加入redis(注解形式) nginx与tomcat关联配置,完成前后端连接 前言 本次采用前后端分离模式,前端以html.css.js ...
- 服务器c的环境配置文件,配置linux服务器环境(jdk+tomcat+mysql+nginx+redis+svn+nexus的maven私服)...
一.安装jdk: 1.远程连接工具我用的是xshell6: 切换到root用户 2.创建安装目录: 创建安装目录 3.将jdk上传到目录下,并解压: 上传文件 解压tar zxvf jdk-8u191 ...
- web前端之后的4天(Ajax,json,redis,maven)
web前端之后的10天(Ajax,json,redis,maven) day2(还是前端的内容) 1.AJAX 2.JSON AJAX: 1.概念:ASynchronous JavaScrip And ...
- Java使用Maven加载redis.clients连接Redis
Maven官方仓库地址:Maven Repository: redis.clients » jedis 在Maven中添加如下依赖: <dependency><groupId> ...
- (Windows Maven项目)Redis数据库的安装和操作实现
Redis是一个内存数据库,他会把你写入其中的数据缓存到内存中,之后会周期性的往磁盘中写入,这篇文章中介绍的是在Windows环境下利用Maven工具编译运行Java文件实现Redis数据库的操作. ...
- SpringBoot+Mybatis+Maven+Mysql实现的校园论坛管理系统(功能包含前后台,登录、markdown发帖、留言、分类帖子查看、用户管理、帖子管理、回复管理、评论管理、留言管理等)
博客目录 SpringBoot+Mybatis+Maven+Mysql实现的校园论坛管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SpringBoot+Mybatis+Maven+Mys ...
- Java项目:农资采购销售系统(java+SSM+Easyui+maven+Mysql)
源码获取:博客首页 "资源" 里下载! 项目描述: 一个完整的农资采购销售系统,系统分为前台会员注册登陆,农资信息浏览,农资详情信息查看,加入购物车,提交订单,付款购买农资等:后台 ...
最新文章
- 常用系统分析监控工具
- Swift - 本地消息的推送通知(附样例)
- c语言接口作用是什么,C语言接口与实现之异常处理try-except
- Java架构-面试怎么谈薪资——让自己的利益最大化
- MySQL/MariaDB的response time插件
- 监听文件变化并自动运行 npm script
- leetcode python3 简单题104. Maximum Depth of Binary Tree
- 给妹子讲python-S01E01好用的列表
- 08.Thymeleaf的应用(国际化和抽取公共页面)
- Oracle 11g数据库基础教程(第2版)-课后习题-第十三章
- 使用Perl5获取有道词典释义
- 2021年上半年系统分析师下午真题和答案解析
- 寒假学习报告 第一周 1.18
- 乔布斯自传预售即夺下销售冠军
- 请教淘宝API sign签名问题,望高人指点!谢谢!
- 海量向量搜索引擎 Milvus 开源啦
- css box-shadow 使用
- #创新应用#全球快递追踪:五次查询只需1KB!
- 手把手教你调试构建一个Vue/小程序商城项目源码
- 云小课|MRS基础原理之CarbonData入门
热门文章
- C/C++新手看过来----讨厌的符号
- php搜索银行所在支行,如何查询怎么查建设银行所属支行?
- python随机生成英文字符串_如何用Python语言生成随机字符串 | 学步园
- 正确重启计算机的方法,电脑一开机就会出现 重启并选择正确的启动设备或在选定的启动设...
- 【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
- linux电脑主机国产,“小皮匠”换工作电脑,国产“中国芯”迷你主机能否够用?...
- python将图片生成视频,和空白视频
- 大学如何开始学编程?
- 上位机发送与接收下位机数据
- 解决ThinkPad X200找不到无线网卡硬件的问题