自定义持久化
jvm-Serialization jvm优化。
优点,序列化时间短,转换后空间小。压缩空间大概为jvm自带Serialization 的1/5-1/10 压缩速度提高几倍。提高序列化性能。
maven依赖
<!--prostuff序列化依赖 --> <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>
实现代码
//引用路径 import com.dyuproject.protostuff.LinkedBuffer; import com.dyuproject.protostuff.ProtostuffIOUtil; import com.dyuproject.protostuff.runtime.RuntimeSchema; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; public class prostuffTest { private final JedisPool jedisPool; private RuntimeSchema<UserPo> userSchema = RuntimeSchema.createFrom(UserPo.class); //获取对象 public UserPo getUser(long userId) { try { //获取redis 客户端 Jedis jedis = jedisPool.getResource(); try { String key = "userId:" + userId; //获取缓存对象 byte[] bytes = jedis.get(key.getBytes()); if (bytes != null) { //通过schema创建空对象 UserPo userPo = userSchema.newMessage(); //反序列化到此对象 ProtostuffIOUtil.mergeFrom(bytes, userPo, userSchema); //返回反序列化后的对象 return userPo; } } finally { //关闭redis连接 jedis.close(); } } catch (Exception e) { } return null; } //存储对象 public String setUser(UserPo userPo) { try { Jedis jedis = jedisPool.getResource(); try { String key = "userId:" + userPo.getUserId(); //对象序列化为字节数组 对象,schema,压缩缓存默认大小 byte[] bytes = ProtostuffIOUtil.toByteArray(userPo, userSchema, LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE)); // 超时缓存 int timeout = 60 * 60;// 1小时 String result = jedis.setex(key.getBytes(), timeout, bytes); return result; } finally { jedis.close(); } } catch (Exception e) { // } return null; } }
序列化性能测试数据对照:https://github.com/eishay/jvm-serializers/wiki