jedis操作redis,结合spring,原生方法
来源:互联网 发布:软件注册赚钱靠谱吗 编辑:程序博客网 时间:2024/05/16 23:38
spring配置:
<!-- redis pool相关配置 --><bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"><!-- 最小空闲数 --><property name="minIdle" value="${redis.minIdle}" /><!-- 最大空闲数 --><property name="maxIdle" value="${redis.maxIdle}" /><!-- 最大连接数 --><property name="maxTotal" value="${redis.maxTotal}" /><!-- 最大等待时间 单位毫秒(ms) --><property name="maxWaitMillis" value="${redis.maxWaitMillis}" /><!-- 使用连接时测试连接是否可用 --><property name="testOnBorrow" value="${redis.testOnBorrow}" /></bean><!-- jedis客户端连接工厂 --><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><property name="poolConfig" ref="poolConfig" /><property name="database" value="${redis.database}" /><property name="port" value="${redis.port}" /><property name="hostName" value="${redis.host}" /><property name="password" value="${redis.password}" /></bean><!-- redisTemplate模板 --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="jedisConnectionFactory" /></bean>
redis.properties:
###Redis缓存配置#缓存池最小空闲数redis.minIdle=5#缓存池最大空闲数redis.maxIdle=100#缓存池最大连接数redis.maxTotal=300#最大等待时间redis.maxWaitMillis=3000#使用连接时是否测试可用redis.testOnBorrow=true#主机地址redis.host=#主机端口redis.port=6379#主机密码redis.password=#数据库下标redis.database=4
具体实现方法:
package org.gyy.redis.dao;import java.util.List;import org.gyy.entity.user.User;import org.gyy.redis.AbstractBaseRedisDao;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.stereotype.Component;import org.springframework.util.Assert;@Componentpublic class UserDao extends AbstractBaseRedisDao<String, User> implements IUserDao {@Overridepublic boolean add(User user) {// TODO Auto-generated method stubboolean result = redisTemplate.execute(new RedisCallback<Boolean>() {@Overridepublic Boolean doInRedis(RedisConnection connection) throws DataAccessException {// TODO Auto-generated method stubRedisSerializer<String> serializer = getRedisSerializer();byte[] key = serializer.serialize(user.getId());byte[] name = serializer.serialize(user.getName());return connection.setNX(key, name);}});return result;}@Overridepublic boolean add(List<User> list) {// TODO Auto-generated method stubAssert.notEmpty(list);boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {@Overridepublic Boolean doInRedis(RedisConnection connection) throws DataAccessException {// TODO Auto-generated method stubRedisSerializer<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;}@Overridepublic void delete(String key) {// TODO Auto-generated method stubredisTemplate.delete(key);}@Overridepublic void delete(List<String> keys) {// TODO Auto-generated method stubredisTemplate.delete(keys);}@Overridepublic boolean update(User user) {// TODO Auto-generated method stubString keyId = user.getId();if (get(keyId) == null) {throw new NullPointerException("数据行不存在:key="+keyId);}boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {@Overridepublic Boolean doInRedis(RedisConnection connection) throws DataAccessException {// TODO Auto-generated method stubRedisSerializer<String> serializer = getRedisSerializer();byte[] keyId = serializer.serialize(user.getId());byte[] name = serializer.serialize(user.getName());connection.set(keyId, name);return true;}});return result;}@Overridepublic User get(String keyId) {// TODO Auto-generated method stubUser result = redisTemplate.execute(new RedisCallback<User>() {@Overridepublic User doInRedis(RedisConnection connection) throws DataAccessException {// TODO Auto-generated method stubRedisSerializer<String> serializer = getRedisSerializer();byte[] key = serializer.serialize(keyId);byte[] value = connection.get(key);if (null == value) {return null;}String name = serializer.deserialize(value);return new User(keyId,name,null);}});return result;}}序列化和模板:
package org.gyy.redis;import javax.annotation.Resource;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.RedisSerializer;public abstract class AbstractBaseRedisDao<K,V> {@Resourceprotected RedisTemplate<K, V> redisTemplate;/** * 得到RedisSerializer * @return */public RedisSerializer<String> getRedisSerializer() {return redisTemplate.getStringSerializer();}/** * 设置redis * @param redisTemplate */public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {this.redisTemplate = redisTemplate;}}测试父类:
package org.gyy.baseTest;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)//使用junit4进行测试 @ContextConfiguration({"classpath*:applicationContext.xml"}) //加载配置文件 //------------如果加入以下代码,所有继承该类的测试类都会遵循该配置,也可以不加,在测试类的方法上///控制事务,参见下一个实例 //这个非常关键,如果不加入这个注解配置,事务控制就会完全失效! //@Transactional //这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时//指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库! //@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) //------------ public class BaseJunit4Test {}
测试类:
package org.gyy.redis;import java.util.ArrayList;import java.util.List;import javax.annotation.Resource;import org.gyy.baseTest.BaseJunit4Test;import org.gyy.entity.user.User;import org.gyy.redis.dao.IUserDao;import org.junit.Test;import org.springframework.test.annotation.Rollback;import org.springframework.transaction.annotation.Transactional;import junit.framework.Assert;public class RedisTest extends BaseJunit4Test{@Resourceprivate IUserDao userDao;@Test//标明是测试方法 @Transactional //标明此方法需使用事务 @Rollback(true)//标明使用完此方法后事务不回滚,true时为回滚 public void addUser(){User user = new User("12345","张三",null);boolean result = userDao.add(user);Assert.assertTrue("插入失败",result);System.out.println("你好");}@Testpublic void testGetUser(){String key = "12";User user = userDao.get(key);Assert.assertNotNull(user);Assert.assertEquals(user.getName(), "李四");System.out.println(user);}@Testpublic void testAddUserList(){List list = new ArrayList<>();for (int i = 0; i < 10; i++) {User user = new User();user.setId("1"+i);user.setName("张三"+i);list.add(user);}long begin = System.currentTimeMillis();boolean result = userDao.add(list);System.out.println(System.currentTimeMillis()-begin);Assert.assertTrue(result);}@Testpublic void testUpdata(){User user = new User("12", "李四", null);boolean update = userDao.update(user);System.out.println(update);}}
阅读全文
0 0
- jedis操作redis,结合spring,原生方法
- Jedis+Spring操作Redis
- redis客户端jedis连接和spring结合
- 操作 redis-jedis--spring-哨兵 2
- Spring集成jedis实现对redis操作
- spring 结合 redis 正确从jedisConnectionFactory获取Jedis实例
- 使用jedis操作redis常用方法
- 利用Spring-Data-Redis和Jedis操作Redis缓存
- spring data Redis 集成jedis操作 redis中的数据。
- Redis + Jedis + Spring
- redis-jedis--spring-哨兵
- Spring Jedis集成Redis
- Spring + Jedis集成Redis
- redis 之 jedis操作
- Jedis操作redis
- 使用Jedis操作redis
- Jedis操作redis
- jedis 操作redis集合
- 【JZOJ 5249】【NOIP2017提高A组模拟8.10】文本编辑器
- 1062. 最简分数(20)
- 每个程序员都应该收藏的算法复杂度速查表
- 2017杭电多校第六场 1011 (勉强算容斥吧)HDU 6106
- Square Destroyer UVA
- jedis操作redis,结合spring,原生方法
- 微信小程序获取用户信息官方推荐方案
- App冷启动与启动白屏处理
- 站在巨人的肩膀上之bill分享有感
- Gazebo笔记
- 剑指offer第一题和第二题(python版和java版)
- 《Python自然语言处理》学习笔记-第四章
- 51NOD1004 N^N的末位数字
- RxBinding详解: 规范而强大的安卓UI响应式编程