java Redis缓存加protostuff反序列实例
来源:互联网 发布:江苏域名备案 编辑:程序博客网 时间:2024/05/16 00:53
好处:使用Redis提高代码的运行速度,比每次都从数据库中获取快,protostuff反序列比java 自身的反序列的速度更快
一、需要现在电脑安装redio
二、工程中需要导入的jar的包
1、jedis-2.7.3.jar(支持redis)
2、commons-pool2-2.0.jar(支持redis)
3、protostuff-api-1.0.8.jar(支持protostuff)
4、protostuff-collectionschema-1.0.8.jar(支持protostuff,别忘这个jar,不然运行时会出错)
5、protostuff-core-1.0.8.jar(支持protostuff)
6、protostuff-runtime-1.0.8.jar(支持protostuff)
注意:若出现java.lang.ClassNotFoundException: com.dyuproject.protostuff.MapSchema$MessageFactory 错误,是因为没有将以上的jar包完全导入,运行时找不到对应的类
三、代码
1. RedisDao.jav(由于Redis是关于数据库的数据缓存的,所以应该归为DAO层)
package org.ssm.dao.cache;
import org.ssm.entity.Seckill;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtobufIOUtil;
import com.dyuproject.protostuff.runtime.RuntimeSchema;
public class RedisDao {
private final JedisPool jedisPool;
public RedisDao(String ip,int port) {
jedisPool = new JedisPool(ip, port);
}
private RuntimeSchema<Seckill> schema=RuntimeSchema.createFrom(Seckill.class);
//获取redis中的对象
public Seckill getSeckill(long seckillId){
try {
Jedis jedis = jedisPool.getResource();
try {
String key = "seckill:"+seckillId;
//并没有实现内部序列化操作
//get -> byte[] -> 反序列 -> Object(seckill)
//采用自定义序列化
byte[] bytes = jedis.get(key.getBytes());
if(bytes != null){
//空对象
Seckill seckill = schema.newMessage();
ProtobufIOUtil.mergeFrom(bytes, seckill, schema);
//seckill 反序列化
return seckill;
}
} finally {
// TODO: handle exception
jedis.close();
}
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
//向redis中存储对象
public String putSeckill(Seckill seckill){
try {
Jedis jedis = jedisPool.getResource();
try {
String key = "seckill:"+seckill.getSeckillId();
byte[] bytes = ProtobufIOUtil.toByteArray(seckill, schema,
LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
int timeOut = 60*60;//一个小时
String result = jedis.setex(key.getBytes(), timeOut, bytes);
return result;
} finally {
// TODO: handle exception
jedis.close();
}
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
}
注意:如果redis是在本机安装,需要打开redis,并且dos界面不能关闭,才能获取到redis 缓存中的对象
- java Redis缓存加protostuff反序列实例
- JAVA中使用redis+protoStuff实现数据库缓存机制
- Protostuff序列化和反序列化
- protostuff序列化/反序列化
- java序列化/反序列化之xml、protobuf、protostuff 的比较与使用例子
- java序列化/反序列化之xstream、protobuf、protostuff 的比较与使用例子
- java序列化/反序列化之xstream、protobuf、protostuff 的比较与使用例子
- Redis缓存Object,List对象 - Java 对象和List的序列化和反序列化
- 使用Protostuff序列化及反序列化优化调试
- Protostuff 序列化/反序列化集合等对象
- Protostuff 序列化/反序列化集合等对象
- java 反序列化实例demo
- JAVA反序列化安全实例解析
- java反序列化安全实例解析
- 「Redis实例」序列化和反序列化
- Java序列化与反序列化【实例】
- java 序列化与反序列化实例
- Java序列化与反序列化【实例】
- Navicat连接mysql
- Tomcat服务器的下载、安装、配置、启动、试用
- 【FastDFS】初步了解
- [PAT-乙级]1025.反转链表
- Linux内核之input输入子系统
- java Redis缓存加protostuff反序列实例
- 在线云评测系统日志二
- 基于 Binder 的跨进程通信以及 Service(二):Java 层
- 学习算法(5)——快速排序
- [PAT-乙级]1026.程序运行时间
- 【HTML5学习笔记】10:表单元素 其一
- JAVA常用API小知识
- windows关闭端口
- 做一下注册和登陆跳转界面