序列化+protobuff+redis
背景:
当redis里面需要存储 “key-字符串,value-对象” 时,是不能直接存对象,而是需要将序列化后的对象存进redis。
redis没有实现内部序列化对象的功能,所以需要自己提前序列化对象。
序列化介绍:
序列化的方法有很多,比如java原生序列化(需要实现Serializable接口)、json序列化、protobuff序列化。
java原生序列化:https://www.cnblogs.com/yaobolove/p/5632891.html
protobuff序列化:告诉我对象的class,内部有schema来描述你的class是什么结构,class必须有get/set方法这种标准的类,而不是string等类
- 第一步:maven依赖
<!--prostuff序列化依赖-->- <dependency>
- <groupId>com.dyuproject.protostuff</groupId>
- <artifactId>protostuff-core</artifactId>
- <version>1.0.</version>
- </dependency>
- <dependency>
- <groupId>com.dyuproject.protostuff</groupId>
- <artifactId>protostuff-runtime</artifactId>
- <version>1.0.</version>
- </dependency>
- 第二步:
定义全局的变量,注意Seckill是我自己定义的一个类,不需要实现接口
- private RuntimeSchema<Seckill> schema = RuntimeSchema.createFrom(Seckill.class);
- 完整代码:
- 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);
- public Seckill getSeckill(long seckillId) {
//redis操作逻辑
try {
Jedis jedis = jedisPool.getResource();
try {
String key = "seckill:" + seckillId;
//并没有实现哪部序列化操作
//采用自定义序列化
//protostuff: pojo.
byte[] bytes = jedis.get(key.getBytes());
//缓存重获取到
if (bytes != null) {
Seckill seckill=schema.newMessage();//这是一个空对象
ProtostuffIOUtil.mergeFrom(bytes,seckill,schema);//按照schema把bytes传到空对象里
//seckill被反序列化- return seckill;
}
}finally {
jedis.close();
}
}catch (Exception e) {- }
return null;
}
- public String putSeckill(Seckill seckill) {
try {
Jedis jedis = jedisPool.getResource();
try {
String key = "seckill:" + seckill.getSeckillId();
//LinkedBuffer.allocate是缓存器,当压缩的对象太大是,起到缓冲的作用,该方法是protobuff自带的。
byte[] bytes = ProtostuffIOUtil.toByteArray(seckill, schema,
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;
}
}
java原生序列化:https://www.cnblogs.com/yaobolove/p/5632891.html
序列化+protobuff+redis的更多相关文章
- SpringBoot Redis使用fastjson进行序列化
在使用spring-data-redis,默认情况下是使用org.springframework.data.redis.serializer.JdkSerializationRedisSerializ ...
- springboot 用redis缓存整合spring cache注解,使用Json序列化和反序列化。
springboot下用cache注解整合redis并使用json序列化反序列化. cache注解整合redis 最近发现spring的注解用起来真的是很方便.随即产生了能不能吧spring注解使用r ...
- RESTful登录设计(基于Spring及Redis的Token鉴权)
转载自:http://www.scienjus.com/restful-token-authorization/ http://m.blog.csdn.net/article/details?id=4 ...
- Redis(2)用jedis实现在java中使用redis
昨天已经在windows环境下安装使用了redis. 下面准备在java项目中测试使用redis. redis官网推荐使用jedis来访问redis.所以首先准备了jedis的jar包,以及需要依赖的 ...
- Spring Boot 整合 Redis 实现缓存操作
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 产品没有价值,开发团队再优秀也无济于事 – <启示录> 』 本文提纲 ...
- Redis 数据结构与内存管理策略(上)
Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
- Redis的安装及学习
最近因为做Chatbot项目需要对于NoSQL数据库进行研究,调研范围包括MongoDB和Redis.本文将介绍Redis在Windows环境的安装及如何利用python来操作Redis数据库. Re ...
- SpringBoot使用Redis缓存
(1).添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- Redis的key和value大小限制
Redis的key和value大小限制 今天研究了下将java bean序列化到redis中存储起来,突然脑袋灵光一闪,对象大小会不会超过redis限制?不管怎么着,还是搞清楚一下比较好 ...
随机推荐
- cmake工程使用distcc
distcc可以加速编译,但是遇到cmake可能就需要处理下. 问题 distcc在 /usr/lib/distcc 中放了各编译器的soft link(如cc/gcc等等),如果 /usr/lib/ ...
- Linux 脚本点滴知识积累
1.以openwrt中的/etc/hotplug.d/button/00-button为例 . /lib/functions.sh do_button () { local button ---- ...
- php方法重写:Declaration of should be compatible with that
<?php// this code does trigger a strict messageerror_reporting( E_ALL | E_STRICT ); class cc exte ...
- FineReport实现java报表多级上报的效果图
Java报表-上报流程管理 Java报表-上报任务管理 Java报表-我的上报任务 Java报表-系统说明
- nagios 安装
#!/bin/sh ################################################ #this scripts is created by oldboy #site: ...
- ES6 学习笔记 (1)
笔记来源:廖雪峰老师的javascript全栈教程 ES6:JavaScript的标准,ECMAScript在不断发展,最新版ECMAScript 6标准(简称ES6)已经在2015年6月正式发布了, ...
- Spell checker - poj 1035 (hash)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 22541 Accepted: 8220 Description Yo ...
- Marple表演电影字幕
119501:15:59,702 --> 01:16:02,782我的幸运死了 而我很清楚是谁杀了她的 (格雷格)My Lucky is dead, and I know perfectly w ...
- Python抓取网页并保存为PDF
https://blog.csdn.net/shenwanjiang111/article/details/67634794
- SteinerTree模板
#define N 55//所有点的个数 #define K 10//SteinerTree 最大顶点数,必须精确 #define INF 10000000 //SteinerTree 邻接矩阵模板. ...