<!-- java访问redis的jar包jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency> <!-- protostuff序列化依赖 --> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.8</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.8</version> </dependency>
<!-- 注入redis dao --> <bean id="redisDao" class="org.demo.dao.cache.RedisDao"> <constructor-arg index="0" value="localhost"></constructor-arg> <constructor-arg index="1" value="6379"></constructor-arg> </bean>
//redis连接池
private final JedisPool jedisPool;//根据对象的字节码文件,生成空对象
private RuntimeSchema<Object> schema = RuntimeSchema.createFrom(Object.class); //Object.class:获取对象的字节码
public RedisDao(String ip, int port){
jedisPool = new JedisPool(ip, port);
}
//将对象缓存到redis
public String putObject(Object obj){
//缓存逻辑:Object --> 序列化 --> byte[] --> 缓存到redis
try {
Jedis jedis = jedisPool.getResource(); //获取redis的连接对象,相当于JDBC的connection
try{
String key = "Object:"+obj.getId();
//进行序列化
byte[] bytes = ProtostuffIOUtil.toByteArray(seckill, schema,
LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE)); //如果对象过大,会进行缓冲
//开始缓存
int timeout = 60*60; //设置超时时间 一小时,通过超时维护一致性
String result = jedis.setex(key.getBytes(), timeout, bytes);
return result;
}finally{
jedis.close();
}
} catch (Exception e) {
e.printStack();
}
return null;
}
//从redis缓存中查询
public Object getObject(long id){
//redis操作逻辑
try {
Jedis jedis = jedisPool.getResource(); //缓存连接对象,相当于数据库连接对象connection
try {
String key = "Object:"+id;
//实体对象并没有实现内部序列化操作
//缓存逻辑:getByte[] --> 反序列化 --> Object
byte[] bytes = jedis.get(key.getBytes()); //从jedis中获取目标对象的序列化对象数组
if(bytes != null){
//反序列化逻辑
Object obj = schema.newMessage(); //通过schema生成一个新的空对象
ProtostuffIOUtil.mergeFrom(bytes, obj, schema); //进行反序列化操作
return obj;
}
} finally {
jedis.close();
}
} catch (Exception e) {
e.printStack();
}
return null;
}
get form redis_cache //首先查询redis if null //如果没有 get from db //再从数据库db查询 if null //如果仍然没有 return null //那么返回空 else //否则 put into redis_cache //现将数据放入redis return obj //再放回数据 else //如果从redis中查询到了 return obj //那么直接返回数据
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有