Spring 整合 Redis
http://blog.csdn.net/java2000_wl/article/details/8543203/
pom构建:
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.x.redis</groupId>
- <artifactId>springredis</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>org.springframework.data</groupId>
- <artifactId>spring-data-redis</artifactId>
- <version>1.0.2.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>3.1.2.RELEASE</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.1.0</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.8.2</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
spring配置文件(applicationContext.xml):
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <context:property-placeholder location="classpath:redis.properties" />
- <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
- <property name="maxIdle" value="${redis.maxIdle}" />
- <property name="maxActive" value="${redis.maxActive}" />
- <property name="maxWait" value="${redis.maxWait}" />
- <property name="testOnBorrow" value="${redis.testOnBorrow}" />
- </bean>
- <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
- p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/>
- <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
- <property name="connectionFactory" ref="connectionFactory" />
- </bean>
- <bean id="userDao" class="com.x.dao.impl.UserDao" />
- </beans>
redis.properties
- # Redis settings
- redis.host=localhost
- redis.port=6379
- redis.pass=java2000_wl
- redis.maxIdle=300
- redis.maxActive=600
- redis.maxWait=1000
- redis.testOnBorrow=true
Java代码:
- package com.x.entity;
- import java.io.Serializable;
- /**
- * @author http://blog.csdn.net/java2000_wl
- * @version <b>1.0</b>
- */
- public class User implements Serializable {
- private static final long serialVersionUID = -6011241820070393952L;
- private String id;
- private String name;
- private String password;
- /**
- * <br>------------------------------<br>
- */
- public User() {
- }
- /**
- * <br>------------------------------<br>
- */
- public User(String id, String name, String password) {
- super();
- this.id = id;
- this.name = name;
- this.password = password;
- }
- /**
- * 获得id
- * @return the id
- */
- public String getId() {
- return id;
- }
- /**
- * 设置id
- * @param id the id to set
- */
- public void setId(String id) {
- this.id = id;
- }
- /**
- * 获得name
- * @return the name
- */
- public String getName() {
- return name;
- }
- /**
- * 设置name
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
- /**
- * 获得password
- * @return the password
- */
- public String getPassword() {
- return password;
- }
- /**
- * 设置password
- * @param password the password to set
- */
- public void setPassword(String password) {
- this.password = password;
- }
- }
- package com.x.dao;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.serializer.RedisSerializer;
- /**
- * AbstractBaseRedisDao
- * @author http://blog.csdn.net/java2000_wl
- * @version <b>1.0</b>
- */
- public abstract class AbstractBaseRedisDao<K, V> {
- @Autowired
- protected RedisTemplate<K, V> redisTemplate;
- /**
- * 设置redisTemplate
- * @param redisTemplate the redisTemplate to set
- */
- public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {
- this.redisTemplate = redisTemplate;
- }
- /**
- * 获取 RedisSerializer
- * <br>------------------------------<br>
- */
- protected RedisSerializer<String> getRedisSerializer() {
- return redisTemplate.getStringSerializer();
- }
- }
- package com.x.dao;
- import java.util.List;
- import com.x.entity.User;
- /**
- * @author http://blog.csdn.net/java2000_wl
- * @version <b>1.0</b>
- */
- public interface IUserDao {
- /**
- * 新增
- * <br>------------------------------<br>
- * @param user
- * @return
- */
- boolean add(User user);
- /**
- * 批量新增 使用pipeline方式
- * <br>------------------------------<br>
- * @param list
- * @return
- */
- boolean add(List<User> list);
- /**
- * 删除
- * <br>------------------------------<br>
- * @param key
- */
- void delete(String key);
- /**
- * 删除多个
- * <br>------------------------------<br>
- * @param keys
- */
- void delete(List<String> keys);
- /**
- * 修改
- * <br>------------------------------<br>
- * @param user
- * @return
- */
- boolean update(User user);
- /**
- * 通过key获取
- * <br>------------------------------<br>
- * @param keyId
- * @return
- */
- User get(String keyId);
- }
- package com.x.dao.impl;
- import java.util.ArrayList;
- import java.util.List;
- import org.springframework.dao.DataAccessException;
- import org.springframework.data.redis.connection.RedisConnection;
- import org.springframework.data.redis.core.RedisCallback;
- import org.springframework.data.redis.serializer.RedisSerializer;
- import org.springframework.util.Assert;
- import com.x.dao.AbstractBaseRedisDao;
- import com.x.dao.IUserDao;
- import com.x.entity.User;
- /**
- * Dao
- * @author http://blog.csdn.net/java2000_wl
- * @version <b>1.0</b>
- */
- public class UserDao extends AbstractBaseRedisDao<String, User> implements IUserDao {
- /**
- * 新增
- *<br>------------------------------<br>
- * @param user
- * @return
- */
- public boolean add(final User user) {
- boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
- public Boolean doInRedis(RedisConnection connection)
- throws DataAccessException {
- RedisSerializer<String> serializer = getRedisSerializer();
- byte[] key = serializer.serialize(user.getId());
- byte[] name = serializer.serialize(user.getName());
- return connection.setNX(key, name);
- }
- });
- return result;
- }
- /**
- * 批量新增 使用pipeline方式
- *<br>------------------------------<br>
- *@param list
- *@return
- */
- public boolean add(final List<User> list) {
- Assert.notEmpty(list);
- boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
- public Boolean doInRedis(RedisConnection connection)
- throws DataAccessException {
- RedisSerializer<String> serializer = getRedisSerializer();
- for (User user : list) {
- byte[] key = serializer.serialize(user.getId());
- byte[] name = serializer.serialize(user.getName());
- connection.setNX(key, name);
- }
- return true;
- }
- }, false, true);
- return result;
- }
- /**
- * 删除
- * <br>------------------------------<br>
- * @param key
- */
- public void delete(String key) {
- List<String> list = new ArrayList<String>();
- list.add(key);
- delete(list);
- }
- /**
- * 删除多个
- * <br>------------------------------<br>
- * @param keys
- */
- public void delete(List<String> keys) {
- redisTemplate.delete(keys);
- }
- /**
- * 修改
- * <br>------------------------------<br>
- * @param user
- * @return
- */
- public boolean update(final User user) {
- String key = user.getId();
- if (get(key) == null) {
- throw new NullPointerException("数据行不存在, key = " + key);
- }
- boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
- public Boolean doInRedis(RedisConnection connection)
- throws DataAccessException {
- RedisSerializer<String> serializer = getRedisSerializer();
- byte[] key = serializer.serialize(user.getId());
- byte[] name = serializer.serialize(user.getName());
- connection.set(key, name);
- return true;
- }
- });
- return result;
- }
- /**
- * 通过key获取
- * <br>------------------------------<br>
- * @param keyId
- * @return
- */
- public User get(final String keyId) {
- User result = redisTemplate.execute(new RedisCallback<User>() {
- public User doInRedis(RedisConnection connection)
- throws DataAccessException {
- RedisSerializer<String> serializer = getRedisSerializer();
- byte[] key = serializer.serialize(keyId);
- byte[] value = connection.get(key);
- if (value == null) {
- return null;
- }
- String name = serializer.deserialize(value);
- return new User(keyId, name, null);
- }
- });
- return result;
- }
- }
- import java.util.ArrayList;
- import java.util.List;
- import junit.framework.Assert;
- import org.junit.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
- import com.x.dao.IUserDao;
- import com.x.entity.User;
- /**
- * 测试
- * @author http://blog.csdn.net/java2000_wl
- * @version <b>1.0</b>
- */
- @ContextConfiguration(locations = {"classpath*:applicationContext.xml"})
- public class RedisTest extends AbstractJUnit4SpringContextTests {
- @Autowired
- private IUserDao userDao;
- /**
- * 新增
- * <br>------------------------------<br>
- */
- @Test
- public void testAddUser() {
- User user = new User();
- user.setId("user1");
- user.setName("java2000_wl");
- boolean result = userDao.add(user);
- Assert.assertTrue(result);
- }
- /**
- * 批量新增 普通方式
- * <br>------------------------------<br>
- */
- @Test
- public void testAddUsers1() {
- List<User> list = new ArrayList<User>();
- for (int i = 10; i < 50000; i++) {
- User user = new User();
- user.setId("user" + i);
- user.setName("java2000_wl" + i);
- list.add(user);
- }
- long begin = System.currentTimeMillis();
- for (User user : list) {
- userDao.add(user);
- }
- System.out.println(System.currentTimeMillis() - begin);
- }
- /**
- * 批量新增 pipeline方式
- * <br>------------------------------<br>
- */
- @Test
- public void testAddUsers2() {
- List<User> list = new ArrayList<User>();
- for (int i = 10; i < 1500000; i++) {
- User user = new User();
- user.setId("user" + i);
- user.setName("java2000_wl" + i);
- list.add(user);
- }
- long begin = System.currentTimeMillis();
- boolean result = userDao.add(list);
- System.out.println(System.currentTimeMillis() - begin);
- Assert.assertTrue(result);
- }
- /**
- * 修改
- * <br>------------------------------<br>
- */
- @Test
- public void testUpdate() {
- User user = new User();
- user.setId("user1");
- user.setName("new_password");
- boolean result = userDao.update(user);
- Assert.assertTrue(result);
- }
- /**
- * 通过key删除单个
- * <br>------------------------------<br>
- */
- @Test
- public void testDelete() {
- String key = "user1";
- userDao.delete(key);
- }
- /**
- * 批量删除
- * <br>------------------------------<br>
- */
- @Test
- public void testDeletes() {
- List<String> list = new ArrayList<String>();
- for (int i = 0; i < 10; i++) {
- list.add("user" + i);
- }
- userDao.delete(list);
- }
- /**
- * 获取
- * <br>------------------------------<br>
- */
- @Test
- public void testGetUser() {
- String id = "user1";
- User user = userDao.get(id);
- Assert.assertNotNull(user);
- Assert.assertEquals(user.getName(), "java2000_wl");
- }
- /**
- * 设置userDao
- * @param userDao the userDao to set
- */
- public void setUserDao(IUserDao userDao) {
- this.userDao = userDao;
- }
- }
Spring 整合 Redis的更多相关文章
- 网站性能优化小结和spring整合redis
现在越来越多的地方需要非关系型数据库了,最近网站优化,当然从页面到服务器做了相应的优化后,通过在线网站测试工具与之前没优化对比,发现有显著提升. 服务器优化目前主要优化tomcat,在tomcat目录 ...
- Spring整合Redis&JSON序列化&Spring/Web项目部署相关
几种JSON框架用法和效率对比: https://blog.csdn.net/sisyphus_z/article/details/53333925 https://blog.csdn.net/wei ...
- spring整合redis之hello
1.pom.xml文件 <dependencies> <!-- spring核心包 --> <dependency> <groupId>org.spri ...
- Spring整合Redis时报错:java.util.NoSuchElementException: Unable to validate object
我在Spring整合Redis时报错,我是犯了一个很低级的错误! 我设置了Redis的访问密码,在Spring的配置文件却没有配置密码这一项,配置上密码后,终于不报错了!
- Redis的安装以及spring整合Redis时出现Could not get a resource from the pool
Redis的下载与安装 在Linux上使用wget http://download.redis.io/releases/redis-5.0.0.tar.gz下载源码到指定位置 解压:tar -xvf ...
- Spring整合redis实现key过期事件监听
打开redis服务的配置文件 添加notify-keyspace-events Ex 如果是注释了,就取消注释 这个是在以下基础上进行添加的 Spring整合redis:https://www. ...
- (转)Spring整合Redis作为缓存
采用Redis作为Web系统的缓存.用Spring的Cache整合Redis. 一.关于redis的相关xml文件的写法 <?xml version="1.0" ...
- spring整合redis使用RedisTemplate的坑Could not get a resource from the pool
一.背景 项目中使用spring框架整合redis,使用框架封装的RedisTemplate来实现数据的增删改查,项目上线后,我发现运行一段时间后,会出现异常Could not get a resou ...
- Spring整合redis,通过sentinel进行主从切换
实现功能描述: redis服务器进行Master-slaver-slaver-....主从配置,通过2台sentinel进行failOver故障转移,自动切换,采用该代码完全可以直接用于实际生产环境. ...
- SpringBoot开发二十-Redis入门以及Spring整合Redis
安装 Redis,熟悉 Redis 的命令以及整合Redis,在Spring 中使用Redis. 代码实现 Redis 内置了 16 个库,索引是 0-15 ,默认选择第 0 个 Redis 的常用命 ...
随机推荐
- 使用swoole和websocket结合来制造弹幕
在知乎上无意中看到了一篇有关这个的话题https://zhuanlan.zhihu.com/p/23992890,刚好没事也好久没弄swoole了就自己按照知乎上的那篇文站实操了一下 那个试验中有几个 ...
- Netty学习二:Java IO与序列化
1 Java IO 1.1 Java IO 1.1.1 IO IO,即输入(Input)输出(Output)的简写,是描述计算机软硬件对二进制数据的传输.读写等操作的统称. 按照软硬件可分为: 磁盘I ...
- C语言数组空间的初始化详解
数组空间的初始化就是为每一个标签地址赋值.按照标签逐一处理.如果我们需要为每一个内存赋值,假如有一个int a[100];我们就需要用下标为100个int类型的空间赋值.这样的工作量是非常大的,我们就 ...
- JS滚轮事件封装
wheel(function(isTrue){ console.log(isTrue); }) function wheel(callback){ if(navigator.userAgent.ind ...
- Comet服务器推送与SignalR
HTTP协议是一个典型的Request/Response协议,是基于TCP/IP之上的一个应用层协议,该协议最典型的特点就是无状态且需要客户端发起Request服务端才能进行Response, ...
- (扩展欧几里德算法)zzuoj 10402: C.机器人
10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...
- PHP的学习--PHP的引用
引用是什么 在 PHP 中引用意味着用不同的名字访问同一个变量内容.这并不像 C 的指针,替代的是,引用是符号表别名.注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字.最 ...
- Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 . 安装IntelliJ IDEA IDEA 全称 IntelliJ IDEA,是java语 ...
- 使用 CSS3 伪元素实现立体的照片堆叠效
CSS3 里引入的伪元素让 Web 开发人员能够在不需要额外添加 HTML 标签的情况下制作出复杂的视觉效果.例如,:before 和 :after 这个两个 CSS3 伪元素就可以帮助你实现很多有趣 ...
- 微信小程序里碰到的坑和小知识
本文作者:dongtao 来自:授权地址 本人低级程序员,以下bug不能确保在其它地方可以以相同的原因复现.同时, 出现很多bug的原因是小程序的基本知识还有编码的基本功不到位造成 路还很长,共勉 ...