数据缓存,可以尝试用RocksDB了

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: `shigen`,一个专注于Java、Python、Vue和Shell的博主,探讨了为何在学习阿里云DRM产品时选择RocksDB而非Redis或Guava。RocksDB是一个高速、可配置的存储系统,适用于Flash和HDFS,支持数据压缩。与Redis相比,RocksDB在高速存储和灵活性上更具优势。在尝试使用RocksDB与SpringBoot集成时遇到问题,目前尚未解决。他还对比了RocksDB、Redis和Guava Cache的特性,强调RocksDB适合大规模、高性能场景,而Redis适合内存存储和实时性需求。

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。
个人IP:shigen

shigen在最近的学习中,接触到了一款新的缓存数据库RocksDB,起因是在学习公司内部的一款产品DRM动态配置,其中的底层就用到了这一款RocksDB数据库。但是我当时想到的就是既然是缓存,为什么不去用redis或者guava呢?为此,借助周末,我研究一下了RocketsDB的相关使用。

首先学习的话,肯定是得借助于RocksDB官网了,官网对于它的解释是:

RocksDB是Facebook的一个实验项目,目的是希望能开发一套能能在服务器压力下,真正发挥高速存储硬件(特别是Flash存储)性能的高效数据库系统。这是一个C++库,允许存储任意长度二进制kv数据。支持原子读写操作。

RocksDB依靠大量灵活的配置,使之能针对不同的生产环境进行调优,包括直接使用内存,使用Flash,使用硬盘或者HDFS。支持使用不同的压缩算法,并且有一套完整的工具供生产和调试使用。

RocksDB大量复用了levedb的代码,并且还借鉴了许多HBase的设计理念。原始代码从leveldb 1.5 上fork出来。同时Rocksdb也借用了一些Facebook之前就有的理念和代码。

巴拉巴拉一大堆,概括起来就是:

  1. 高速存储的数据库
  2. 灵活的配置,可以保存在内存、闪存、Flash、HDFS
  3. 数据二进制压缩

对比起来Redis,顿时觉得这个高级在它的高速存储和灵活的配置了。手已经有点痒痒了,准备开始适用一下了。

参照rocksDB的使用文档,我写了如下的代码进行测试:

结合springboot实现单元测试出现了一点问题:

集合springboot出现的问题

目前还没有找到解决方案。代码如下:

配置:

@Configuration
public class RocksDBConfig {
   
   

    @Value("${rocksdb.path}")
    private String dbPath;

    @Bean(destroyMethod = "close")
    public RocksDB rocksDB() throws Exception {
   
   
        Options options = new Options().setCreateIfMissing(true);
        return RocksDB.open(options, dbPath);
    }
}

其中,我的配置如下:

rocksdb:
path: ~/rocksdb_data

Service层:

@Service
public class RocksDBService {
   
   

    @Resource
    private RocksDB rocksDB;

    public void putData(String key, String value) throws RocksDBException {
   
   
        rocksDB.put(key.getBytes(), value.getBytes());
    }

    public String getData(String key) throws RocksDBException {
   
   
        byte[] valueBytes = rocksDB.get(key.getBytes());
        return valueBytes != null ? new String(valueBytes) : null;
    }

    public void updateData(String key, String value) throws RocksDBException {
   
   
        rocksDB.put(key.getBytes(), value.getBytes());
    }

    public void deleteData(String key) throws RocksDBException {
   
   
        rocksDB.delete(key.getBytes());
    }
}

很奇怪的操作,那就先来看下理论的知识吧。借助GPT,我总结了它和redisguava之间的区别:

特征 RocksDB Redis Guava Cache
类型 持久化键值存储引擎 内存键值存储引擎 内存缓存引擎
存储引擎 LSM树 哈希表 内存哈希表
内存使用 低(可配置) 中等
持久性
事务支持
数据结构 键值对 键值对 键值对
支持数据类型 字符串、字节流、字节数组等 字符串、哈希、列表、集合、有序集合等 任何Java对象
缓存策略 不适用(持久化存储) LRU、TTL等 LRU、最大条目数、定时过期等
分布式支持 可以通过RocksDB的其他工具实现 是,通过集群和主从复制
优势 适合大规模数据、高吞吐量、低延迟 速度快、支持丰富的数据结构 轻量级、易于集成、适合单机应用
劣势 配置和维护复杂 内存受限、不支持持久化 不支持持久化、不适合大规模数据

其中,涉及到管理、LSM Tree的原理可以参看文章:RocksDB零基础学习

最后,还是借助工具对于RocksDB和redis进行了一波总结:

  • 如果你需要在本地文件系统中持久化存储大量数据,并且对数据的读写性能有较高的要求,那么可以选择RocksDB。
  • 如果你需要在内存中存储数据,并且对数据的实时性要求较高,或者需要支持复杂的数据结构和功能,那么可以选择Redis。

总结就是:读写性能——RocksDB,实时性——redis

与shigen一起,每天不一样!

目录
相关文章
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
439 1
|
3月前
|
Web App开发 存储 缓存
如何精准清除特定类型或标签的缓存数据?
如何精准清除特定类型或标签的缓存数据?
361 57
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
2月前
|
存储 缓存 监控
一次缓存引发的文件系统数据不一致问题排查与深度解析
本文详述了一次由自研分布式文件系统客户端 EFC 的缓存架构更新所引发的严重数据不一致问题的完整排查过程。
一次缓存引发的文件系统数据不一致问题排查与深度解析
|
5月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
215 32
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
158 2
数据的存储--Redis缓存存储(二)
|
7月前
|
机器学习/深度学习 人工智能 缓存
MHA2MLA:0.3%数据微调!复旦团队开源推理加速神器,KV缓存狂降96.87%
MHA2MLA是复旦大学、华东师范大学、上海AI Lab等机构联合推出的数据高效微调方法,通过引入多头潜在注意力机制(MLA),显著优化基于Transformer的LLM推理效率,降低推理成本。
243 1
MHA2MLA:0.3%数据微调!复旦团队开源推理加速神器,KV缓存狂降96.87%
|
缓存 监控 前端开发
处理页面缓存中数据不一致的问题
【10月更文挑战第9天】
429 122
|
缓存 NoSQL Java
Redis 缓存与数据库数据不一致问题
Redis 缓存与数据库数据不一致问题
244 3
|
11月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
214 5