上次写完了一个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相关推荐

  1. Redis集成到Maven工程(Jedis客户端)

    1.说明 Redis不仅可以使用命令行操作, 也支持大部分主流编程语言的客户端, 本文介绍Java客户端Jedis的使用, Jedis API提供了完整的Redis命令, 能够和Redis命令行一一对 ...

  2. 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo

    前言:我这里搭建好eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo.新手快速上手直接看demo. 最后处提供完整高质量de ...

  3. SSM+nginx+tomcat+maven+mysql+redis环境搭建及工程全套配置,实现前后端动静分离

    目录 前言 服务器环境搭建 windows开发环境 SSM搭建 加入redis(注解形式) nginx与tomcat关联配置,完成前后端连接 前言 本次采用前后端分离模式,前端以html.css.js ...

  4. 服务器c的环境配置文件,配置linux服务器环境(jdk+tomcat+mysql+nginx+redis+svn+nexus的maven私服)...

    一.安装jdk: 1.远程连接工具我用的是xshell6: 切换到root用户 2.创建安装目录: 创建安装目录 3.将jdk上传到目录下,并解压: 上传文件 解压tar zxvf jdk-8u191 ...

  5. web前端之后的4天(Ajax,json,redis,maven)

    web前端之后的10天(Ajax,json,redis,maven) day2(还是前端的内容) 1.AJAX 2.JSON AJAX: 1.概念:ASynchronous JavaScrip And ...

  6. Java使用Maven加载redis.clients连接Redis

    Maven官方仓库地址:Maven Repository: redis.clients » jedis 在Maven中添加如下依赖: <dependency><groupId> ...

  7. (Windows Maven项目)Redis数据库的安装和操作实现

    Redis是一个内存数据库,他会把你写入其中的数据缓存到内存中,之后会周期性的往磁盘中写入,这篇文章中介绍的是在Windows环境下利用Maven工具编译运行Java文件实现Redis数据库的操作. ...

  8. SpringBoot+Mybatis+Maven+Mysql实现的校园论坛管理系统(功能包含前后台,登录、markdown发帖、留言、分类帖子查看、用户管理、帖子管理、回复管理、评论管理、留言管理等)

    博客目录 SpringBoot+Mybatis+Maven+Mysql实现的校园论坛管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SpringBoot+Mybatis+Maven+Mys ...

  9. Java项目:农资采购销售系统(java+SSM+Easyui+maven+Mysql)

    源码获取:博客首页 "资源" 里下载! 项目描述: 一个完整的农资采购销售系统,系统分为前台会员注册登陆,农资信息浏览,农资详情信息查看,加入购物车,提交订单,付款购买农资等:后台 ...

最新文章

  1. 常用系统分析监控工具
  2. Swift - 本地消息的推送通知(附样例)
  3. c语言接口作用是什么,C语言接口与实现之异常处理try-except
  4. Java架构-面试怎么谈薪资——让自己的利益最大化
  5. MySQL/MariaDB的response time插件
  6. 监听文件变化并自动运行 npm script
  7. leetcode python3 简单题104. Maximum Depth of Binary Tree
  8. 给妹子讲python-S01E01好用的列表
  9. 08.Thymeleaf的应用(国际化和抽取公共页面)
  10. Oracle 11g数据库基础教程(第2版)-课后习题-第十三章
  11. 使用Perl5获取有道词典释义
  12. 2021年上半年系统分析师下午真题和答案解析
  13. 寒假学习报告 第一周 1.18
  14. 乔布斯自传预售即夺下销售冠军
  15. 请教淘宝API sign签名问题,望高人指点!谢谢!
  16. 海量向量搜索引擎 Milvus 开源啦
  17. css box-shadow 使用
  18. #创新应用#全球快递追踪:五次查询只需1KB!
  19. 手把手教你调试构建一个Vue/小程序商城项目源码
  20. 云小课|MRS基础原理之CarbonData入门

热门文章

  1. C/C++新手看过来----讨厌的符号
  2. php搜索银行所在支行,如何查询怎么查建设银行所属支行?
  3. python随机生成英文字符串_如何用Python语言生成随机字符串 | 学步园
  4. 正确重启计算机的方法,电脑一开机就会出现 重启并选择正确的启动设备或在选定的启动设...
  5. 【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
  6. linux电脑主机国产,“小皮匠”换工作电脑,国产“中国芯”迷你主机能否够用?...
  7. python将图片生成视频,和空白视频
  8. 大学如何开始学编程?
  9. 上位机发送与接收下位机数据
  10. 解决ThinkPad X200找不到无线网卡硬件的问题