- 浏览: 230333 次
- 性别:
- 来自: 上海
最新评论
1,redis缓存配置类
2,spring配置
3,序列化工具类
public class RedisCache { protected static Logger logger = Logger.getLogger(RedisCache.class); public final static String VIRTUAL_COURSE_PREX = "_lc_vc_"; private RedisCacheConfig redisCacheConfig; private JedisPool jedisPool = null; public RedisCacheConfig getRedisCacheConfig() { return redisCacheConfig; } public void setRedisCacheConfig(RedisCacheConfig redisCacheConfig) { this.redisCacheConfig = redisCacheConfig; } public RedisCache(){ } /** * 初始化Redis连接池 */ private void initialPool(){ JedisPoolConfig poolConfig = redisCacheConfig.getPoolConfig(); String[] serverArray = redisCacheConfig.getServers().split(","); for(int i = 0; i < serverArray.length; i++){ try { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(poolConfig.getMaxTotal()); config.setMaxIdle(poolConfig.getMaxIdle()); config.setMaxWaitMillis(poolConfig.getMaxWaitMillis()); config.setTestOnBorrow(poolConfig.getTestOnBorrow()); config.setTestOnReturn(poolConfig.getTestOnReturn()); jedisPool = new JedisPool(config, serverArray[i], redisCacheConfig.getPort(), redisCacheConfig.getTimeout()); break; } catch (Exception e) { logger.error("initialPool create JedisPool(" + serverArray[i] + ") error : "+e); } } } /** * 在多线程环境同步初始化 */ private synchronized void poolInit() { if (jedisPool == null) { initialPool(); } } /** * 同步获取Jedis实例 * @return Jedis */ public synchronized Jedis getJedis() { if (jedisPool == null) { poolInit(); } Jedis jedis = null; try { if (jedisPool != null) { jedis = jedisPool.getResource(); jedis.auth(redisCacheConfig.getAuth()); } } catch (Exception e) { logger.error("Get jedis error : "+e); e.printStackTrace(); }finally{ returnResource(jedis); } return jedis; } /** * 释放jedis资源 * @param jedis */ public void returnResource(final Jedis jedis) { if (jedis != null && jedisPool !=null) { jedisPool.returnResource(jedis); } } /** * 得到Key * @param key * @return */ public String buildKey(String key){ return VIRTUAL_COURSE_PREX + key; } /** * 设置 String * @param key * @param value */ public void setString(String key ,String value){ try { value = StringUtil.isNullOrEmpty(value) ? "" : value; getJedis().set(buildKey(key),value); } catch (Exception e) { logger.error("Set key error : "+e); } } /** * 设置 过期时间 * @param key * @param seconds 以秒为单位 * @param value */ public void setString(String key ,int seconds,String value){ try { value = StringUtil.isNullOrEmpty(value) ? "" : value; getJedis().setex(buildKey(key), seconds, value); } catch (Exception e) { logger.error("Set keyex error : "+e); } } /** * 获取String值 * @param key * @return value */ public String getString(String key){ String bKey = buildKey(key); if(getJedis() == null || !getJedis().exists(bKey)){ return null; } return getJedis().get(bKey); } /** * 设置 list * @param <T> * @param key * @param value */ public <T> void setList(String key ,List<T> list){ try { getJedis().set(key.getBytes(),ObjectTranscoder.serialize(list)); } catch (Exception e) { logger.error("Set key error : "+e); } } /** * 获取list * @param <T> * @param key * @return list */ public <T> List<T> getList(String key){ String bKey = buildKey(key); if(getJedis() == null || !getJedis().exists(key.getBytes())){ return null; } byte[] in = getJedis().get(key.getBytes()); List<T> list = (List<T>) ObjectTranscoder.deserialize(in); return list; } /** * 设置 map * @param <T> * @param key * @param value */ public <T> void setMap(String key ,Map<String,T> map){ try { getJedis().set(key.getBytes(),ObjectTranscoder.serialize(map)); } catch (Exception e) { logger.error("Set key error : "+e); } } /** * 获取list * @param <T> * @param key * @return list */ public <T> Map<String,T> getMap(String key){ String bKey = buildKey(key); if(getJedis() == null || !getJedis().exists(key.getBytes())){ return null; } byte[] in = getJedis().get(key.getBytes()); Map<String,T> map = (Map<String, T>) ObjectTranscoder.deserialize(in); return map; } }
2,spring配置
<!-- 声明redisCache --> <bean id="redisCache" class="com.cache.RedisCache" depends-on="redisCacheConfig"> <property name="redisCacheConfig" ref="redisCacheConfig"></property> </bean> <bean id="redisCacheConfig" class="com.able.virtualcourse.cache.RedisCacheConfig" depends-on="jedisPoolConfig"> <property name="servers"><value>${redis.servers}</value></property> <property name="port"><value>${redis.port}</value></property> <property name="auth"><value>${redis.auth}</value></property> <property name="timeout"><value>${redis.pool.timeout}</value></property> <property name="poolConfig" ref="jedisPoolConfig"></property> </bean> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal"><value>${redis.pool.maxTotal}</value></property> <property name="maxIdle"><value>${redis.pool.maxIdle}</value></property> <property name="maxWaitMillis"><value>${redis.pool.maxWait}</value></property> <property name="testOnBorrow"><value>${redis.pool.testOnBorrow}</value></property> <property name="testOnReturn"><value>${redis.pool.testOnReturn}</value></property> </bean>
3,序列化工具类
public class ObjectTranscoder { public static byte[] serialize(Object value) { if (value == null) { throw new NullPointerException("Can't serialize null"); } byte[] rv=null; ByteArrayOutputStream bos = null; ObjectOutputStream os = null; try { bos = new ByteArrayOutputStream(); os = new ObjectOutputStream(bos); os.writeObject(value); os.close(); bos.close(); rv = bos.toByteArray(); } catch (IOException e) { throw new IllegalArgumentException("Non-serializable object", e); } finally { try { if(os!=null)os.close(); if(bos!=null)bos.close(); }catch (Exception e2) { e2.printStackTrace(); } } return rv; } public static Object deserialize(byte[] in) { Object rv=null; ByteArrayInputStream bis = null; ObjectInputStream is = null; try { if(in != null) { bis=new ByteArrayInputStream(in); is=new ObjectInputStream(bis); rv=is.readObject(); is.close(); bis.close(); } } catch (Exception e) { e.printStackTrace(); }finally { try { if(is!=null)is.close(); if(bis!=null)bis.close(); } catch (Exception e2) { e2.printStackTrace(); } } return rv; } }
发表评论
-
三分钟学会@Autowired@Qualifier@Primary注解
2018-05-20 09:39 0今天主要简单的跟大家介绍一下spring自动装配相关的@A ... -
两分钟学会自动注入@Resource和@Inject注解
2018-05-20 09:25 9284上文系统的介绍了spring自动装配@Autowired注解 ... -
一分钟学会spring注解之@Lazy注解
2018-05-20 09:24 6337今天主要从以下几方面来介绍一下@Lazy注解 @La ... -
一分钟学会spring注解之@Autowired注解(二)
2018-05-20 09:35 6028上一遍文章中有简单的介绍@Autowired注解的使用,没有 ... -
全网最全技术电子书免费发放
2018-05-20 09:19 1317之前整理过一些互联网技术相关的视频资料,大家的反馈都不错,然 ... -
深入理解spring之Aware接口的相关实现
2018-05-20 09:28 1515前面几篇文章简单的介绍了spring中bean注解以及怎么在 ... -
200G免费偷懒必看资料全集(二)
2018-05-05 16:10 1151在上文小编整理过一大波资料分享出来之后,大家的回应说都不错 ... -
250G偷懒必看资料全集
2018-05-05 16:04 1250要想成为一个专业的'偷懒'程序员,没有点偷懒必看资料怎么能 ... -
200G免费偷懒必看资料全集(二)
2018-05-04 22:41 0在上文小编整理过一大波资料分享出来之后,大家的回应说都不错( ... -
深入理解java的反射机制
2018-04-29 19:03 581今天将从以下4方面来系统的学习一下java的反射机制: ... -
深入理解java注解的实现原理
2018-04-29 19:13 738今天将从以下4个方面来系统的学习一下java注解 ... -
深入理解java动态代理的实现机制
2018-04-29 19:10 567今天将从以下5方面来系统的学习一下java动态代理的实现机 ... -
spring boot 过滤器去除请求参数前后空格
2017-09-26 21:54 11378需求:去除用户表单参数中由于用户不小心输 ... -
spring+quartz实现定时任务支持集群
2016-08-08 16:49 747最近项目要做集群,然后找了下资料发现quartz本身就支持集 ... -
spring+aop+自定义注解实现操作日志记录
2016-08-07 11:49 75731,spring配置文件 <bean class= ... -
Nginx1.9+LuaJIT+Kafka的点播监控系统实战
2016-05-21 11:03 1106安装前的准备 Nginx1.9.9LuaJIT-2.0. ... -
post,get请求nginx记录日志kafka自动扫描程序
2016-04-14 16:03 1254kafka的介绍以及使用安装请查看博文ht ... -
springmvc整合dubbo分布式系统的搭建小例子
2016-01-30 12:56 5430四个步骤 1 搭建zookeepe ... -
SpringMVC通过Redis实现缓存主页
2016-01-28 10:48 1782这里说的缓存只是为了提供一些动态的界面没办法作静态化 ... -
java数字签名三种方式
2015-07-08 08:48 7142以下3钟数字签名都是基于jdk7的 1,RSA Strin ...
相关推荐
● 屏蔽byte[]数据类型,所有实现了序列化接口的对象均可直接在Redis进行读写 ● 保留String数据类型(并不会序列化成byte[],目的是保留与其他程序交互数据的方式) ● 把Redis的Map封装成RedisMap类(key强制为...
在这个示例中,可能使用了序列化方法将Java对象(如String、Bean、List和Map)转化为字节数据存储在Redis中,并能反序列化回原对象。 2. **操作String**: Redis支持简单的键值对操作,String是最基础的数据类型。...
在本篇博客“征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)”中,我们将深入探讨如何利用Redis、Jedis库以及Spring框架进行哈希表的操作,特别是`HMGET`和`HMSET`这两个重要的命令。...
在Java开发中,Redis作为一个高性能的键值存储系统,常被用作缓存或数据库,其数据操作便捷高效。为了在不同的服务器之间迁移或者备份Redis中的数据,我们需要实现数据的导入与导出功能。本篇将详细介绍如何使用Java...
3. **序列化与反序列化**:在 Java 应用程序中,通常需要将 Java 对象序列化为二进制数据后再存入 Redis,反之亦然。常见的序列化框架包括 JSON、Protobuf 等。 4. **异步与非阻塞**:Redisson 等客户端库提供了...
总之,Redis的String、List、Set和Hash提供了丰富的数据结构,使得它成为Java开发中理想的缓存和数据持久化工具。合理运用这些数据类型,可以优化数据处理,提升应用程序的响应速度和整体性能。通过深入学习和实践,...
3. **性能优秀**:Jedis通过优化的网络通信和序列化机制,确保了与Redis服务器交互的高效性。 4. **连接池管理**:Jedis支持连接池,可以有效管理多个客户端连接,提高并发性能。 5. **集群支持**:Jedis提供对Redis...
以上就是SpringBoot结合Redis实现存储自定义对象(如Map和List)以及缓存数据的基本步骤。通过这种方式,我们可以有效地利用Redis的内存优势,提高系统的响应速度和并发处理能力。在实际开发中,还需要考虑缓存更新...
- **哈希操作**:可以将对象序列化后存入哈希表,便于存储和检索复杂数据。 ```java Map, String> hash = new HashMap(); hash.put("field1", "value1"); hash.put("field2", "value2"); jedis.hset("myHash", hash...
// 配置序列化器,如使用 JdkSerializationRedisSerializer 或 StringRedisSerializer // ... return template; } } ``` 有了 Jedis 实例后,我们可以通过多种方式操作 Redis。以下是一些常见的 Jedis 操作: ...
在IT行业中,Java和Redis是两个非常重要的技术组件。Java是一种广泛应用的编程语言,而Redis则是一种...当然,这只是Java调用Redis的入门级Demo,实际开发中还需要考虑更多因素,如错误处理、数据序列化、事务操作等。
* 序列化的优点是可以将对象转换为二进制数据,以便于存储和传输。 二、消息类 * 消息类是实现消息队列的核心组件,需要实现Serializable接口。 * 消息类需要有唯一的标识符,以便于区分不同的消息。 * 消息类可以...
Redis是一种高性能的键值对数据存储系统,以其丰富的数据结构和高效的读写性能著称。在个人总结中,我们可以看到Redis主要使用了五种数据结构,分别是String、List、Set、Hash和ZSet,每种都有其独特的特性和用途。 ...
在这个配置中,我们指定了Redis服务器的地址和端口,并配置了序列化器,因为Redis存储的是字节流,需要序列化和反序列化Java对象。这里使用了StringRedisSerializer处理键,以及`GenericJackson2JsonRedisSerializer...
Redis,全名Remote Dictionary Server,是一款高性能的键值存储系统,常用于数据缓存、消息队列以及数据库持久化等场景。它以其丰富的数据结构、高效的性能和简单易用的特性,受到了广大开发者的青睐。在本教程中,...
- **数据持久化**:Redis支持将数据保存至磁盘,而Memcached仅支持内存存储。 - **数据类型**:Redis支持更丰富的数据类型。 - **事务支持**:Redis支持事务处理,而Memcached不支持。 #### 5、Memcache与Redis的...
针对String、list、set、map,需要在RedisTemplate中配置序列化器,例如使用Jackson2JsonRedisSerializer: ```xml <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer....
string类型是二进制安全的,可以包含任何数据,例如jpg图片或者序列化的对象。string类型可以存储的最大值为512MB。 string命令 * SET key "value":设置key的值 * GET key:读取key的值 * GETRANGE key 0 3:读取...
在本文中,我们将深入探讨Redis缓存的使用,以及如何在Java中...通过使用FastJSON进行序列化和反序列化,以及Spring Boot的`StringRedisTemplate`,我们可以方便地在内存和持久存储之间切换数据,确保系统的高效运行。