您好,登錄后才能下訂單哦!
這篇文章主要介紹“protobuf在java redis中怎么使用”,在日常操作中,相信很多人在protobuf在java redis中怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”protobuf在java redis中怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
下面首先介紹在idea 中 使用插件 根據(jù).proto 文件生成 .java 文件
1. 首先在此module 中編寫一個.proto 文件
2 pom 引用插件
<plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.5.0</version> <configuration> <protocArtifact> com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier} </protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact> io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier} </pluginArtifact> </configuration> <executions> <execution> <goals> <goal>compile</goal> </goals> </execution> </executions></plugin>
|
點擊 protobuf:complie 后
在項目target文件下 會生成一個 Java文件
將此文件復(fù)制到你項目源碼目錄即可使用。完畢后 pom 插件 注釋掉。防止每次編譯都會生成Java文件 導(dǎo)致項目報錯。
2 關(guān)于spring Boot 如何集成redis 不再贅述 直接上關(guān)于RedisSerializer
類編寫
我們現(xiàn)在要使用protobuf 作為redis 存儲 序列化 工具。
故 需要編寫一個RedisSerializer 實現(xiàn)類:
為了通用,故定義成泛型:
@Slf4jpublic class ProtobufRedisSerializer<T extends MessageLite> implements RedisSerializer<T> { private MessageLite messageLite; private Class<T> type; public ProtobufRedisSerializer(T messageLite, Class<T> type) { this.messageLite = messageLite; this.type = type; } @Override public byte[] serialize(T t) throws SerializationException { return t.toByteArray(); } @Override public T deserialize(byte[] bytes) throws SerializationException { try { if (Objects.isNull(bytes) || bytes.length == 0) { return null; } MessageLite messageLite = this.messageLite.getParserForType().parseFrom(bytes); return type.cast(messageLite); } catch (InvalidProtocolBufferException e) { log.error("ProtobufRedisSerializer error", e); } return null; }} |
核心代碼如上:
附上RedisTenplateConfig
@Beanpublic RedisTemplate<String, DynamicRecord> recordRedisTemplate( RedisConnectionFactory connectionFactory) { RedisTemplate<String, DynamicRecord> recordRedisTemplate = new RedisTemplate<>(); recordRedisTemplate.setConnectionFactory(connectionFactory); ProtobufRedisSerializer<DynamicRecord> protobufRedisSerializer = new ProtobufRedisSerializer<>( DynamicRecord.getDefaultInstance(), DynamicRecord.class); recordRedisTemplate.setValueSerializer(protobufRedisSerializer); recordRedisTemplate.setHashValueSerializer(protobufRedisSerializer); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); recordRedisTemplate.setKeySerializer(stringRedisSerializer); recordRedisTemplate.setHashKeySerializer(stringRedisSerializer); return recordRedisTemplate;} |
到此,關(guān)于“protobuf在java redis中怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。