jvm-序列化优化以及redis中的使用。

Posted yanxioayu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm-序列化优化以及redis中的使用。相关的知识,希望对你有一定的参考价值。

自定义持久化
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

 

以上是关于jvm-序列化优化以及redis中的使用。的主要内容,如果未能解决你的问题,请参考以下文章

如何优化C ++代码的以下片段 - 卷中的零交叉

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化

33_redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)

Redis入门——基本操作

分析定位占用CPU资源高的JVM线程

Tomcat8优化--JVM字节码