求一款符合需求的 Redis 开源中间件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
seedhk
V2EX    程序员

求一款符合需求的 Redis 开源中间件

  •  
  •   seedhk 2024 年 12 月 16 日 3153 次点击
    这是一个创建于 401 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:

    增:支持将数据写入到 Redis ,隔一段时间自动将数据同步到 MySQL/sqlserver ,同步完成后,Redis 中已同步的数据会自动清除;

    删:支持根据指定业务字段(或者 KEY )将数据从 Redis 删除,删除后的数据不会同步到 Redis ;

    改:删+增的逻辑;

    查:支持 Redis 数据查询,最好能像查询数据库一样,使用类似 SQL 语言查询 Redis ,如果未查到会主动去数据库查询并写入 Redis 等,有 Java 版本的客户端;

    请问没有这样的中间件,全部符合或者符合若干个条件都可以推荐下,

    谢谢大佬们!

    第 1 条附言    2024 年 12 月 17 日

    看了大佬们的回复,觉得这个想法确实太奇怪了,在此贴一下我的原始需求和产生这个需求的问题

    问题

    数据库版本: 阿里云RDS SQLSERVER 产生这个问题的需求是因为老项目的长SQL实在是过于多了,几百行的SQL一找一个准,去优化SQL工作量非常大。

    导致生产环境数据库很不稳定,经常因为SQL引起数据库不可用导致被客户投诉罚钱,但是阿里云高可用对于小企业来说实在是太贵了。迁移下云又需要一个比较专业的DBA来运维数据库,小企业老板估计也不会同意。

    于是便有了以下这几个步骤:

    • 使用了DTS,同步主库的数据到从库,基本上实现了读写分离;

    • 拆分了核心业务,但是核心业务仍然有访问数据库的需求,因此万一数据库不可用时,如何保证核心业务的正常运行,成为了一个大问题;

    领导于是提了一个点:

    • 能否通过在中间加一层缓存层的方式,比如Redis,核心业务的增删改查先走Redis。一段时间后落库,这样即使数据库挂了,只要能撑住10分钟数据库就能恢复。

    基于以上的点,才提了这个问题,不知道有没有其他更好的方案,求大佬们指教,谢谢~
    shangfabao
        1
    shangfabao  
       2024 年 12 月 16 日
    应该是没有,自己手撸一个吧
    THESDZ
        2
    THESDZ  
       2024 年 12 月 16 日
    pisay
        3
    pisay  
       2024 年 12 月 16 日
    使用 nifi 拉流程实现吧
    mindddd
        4
    mindddd  
       2024 年 12 月 16 日
    感觉自己可以根据需求撸一个
    spritecn
        5
    spritecn  
       2024 年 12 月 16 日
    @mindddd 实话,感觉撸一个就俩工作日的事
    BuggerL
        6
    BuggerL  
       2024 年 12 月 16 日 via iPhone   2
    @spritecn 认真的吗,sql 查 redis 就不是一两天能做完的。。可以说是做不了了
    sampeng
        7
    sampeng  
       2024 年 12 月 16 日 via iPhone
    @BuggerL 你的查就想多了,实际情况没人这么用,是属于自己给自己找不痛快。正常业务我算你 100 个接口,1000 条不同类型的 sql.。这是一个比较有规模和复杂度的项目了吧。你需要 1000 个 sql 都过 redis 做一层缓存?顶天十分之一最重要的访问量最大的。100 个了不起了。然后就为这点鸡毛蒜皮的事整个 sql 解析出来?不过也不是没有,找 sql 查 redis 的开源项目挺多的…没啥意义
    zt5b79527
        8
    zt5b79527  
       2024 年 12 月 16 日
    奇奇怪怪,倒不如把你的原始需求贴出来,让大佬们给你改改方案
    ala2008
        9
    ala2008  
       2024 年 12 月 16 日
    没有,你这个太不通用,偏向业务。自己搞吧
    securityCoding
        10
    securityCoding  
       2024 年 12 月 16 日
    没有,这是纯业务跟中间件没啥关系
    BuggerL
        11
    BuggerL  
       2024 年 12 月 16 日
    @sampeng 回错人了吧。。redis 实现 sql 解析本来就是异想天开。。。
    zzmark06
        12
    zzmark06  
       2024 年 12 月 16 日
    你的第二句话,好像不太通畅。

    以前我们有做过利用 redis 批量写 db 。
    拿 redis 当 buffer 用。
    逻辑基本是手搓的。redis 只管 SET ,定时会用 SCAN 扫,都是时序数据没有 update 。

    不要问为啥不用 kafka ,甲方有安规,kafka 被卡供应了过不去。
    sampeng
        13
    sampeng  
       2024 年 12 月 16 日
    @BuggerL 为啥是异想天开。。。https://zeesql.com/随便搜了一个。我的意思是没有任何价值。所以开源社区几乎没有几个实现。像 redis 这类只要你搞开发就要上的中间件,如果价值大,开源实现一抓一大把。无非就是语法解析罢了。缓存要设计逻辑的。。绝对不是抽象的和数据库一样。。。。鬼知道是不是 redis 里值错的或者瞬时变化或是逻辑 bug ,还有缓存穿透,冷热数据启动,全局锁,分布式异步状态的切换等等。。这些问题都碰到过,都得单拿出来设计数据结构和读/存的逻辑。。可能 1000 个接口你全用这种方式缓存了。。所有数据都是要走一个中间件。想想查 bug 的恐怖程度就难受
    BuggerL
        14
    BuggerL  
       2024 年 12 月 16 日
    @sampeng 这东西搜了搜,压根没人在生产环境用。他绝对不能完整兼容 sql 语法,应该就是简单的 sql 可以支持。所以这东西应该就是个玩具。没必要争了,反正用 redis 跑 sql 不现实
    seedhk
        15
    seedhk  
    OP
       2024 年 12 月 17 日
    @THESDZ 看了下不满足,谢谢老哥
    @zzmark06 请问您当时是怎么实现的,可以说下具体的方案吗?
    zzmark06
        16
    zzmark06  
       2025 年 1 月 27 日
    不太长看 v2 ,许久后回复。

    redis 和 db 异构,必然得面临数据不一致的问题。
    redis 是 KV 型存储,没有足够的描述结构。

    我们当时的方案,是有个针对的,就是只用 redis 存储 IOT 报文,业务上没有 update/delete ,纯 insert ,所以只是针对 key 设计就够了。

    没有用 kafka 主要还有个问题,业务侧有明细数据查询的时效性需求,给的指标是端到端不超过 2s(从 iot 网关开始计算,实际上是不合理需求,但甲方爸爸……)。kafka 其实是守不住 2s 的,所以用了大把的 redis 写。
    数据 set ,数据对应的一级索引 hset 。
    设计两个 key 就行,然后有 batch 任务每隔多久来扫走并删除相应数据( redis 最多存 2 个时间窗口,batch 扫走第二个,删掉第一个)

    至于你们领导的想法,那是扯淡,完全置数据复杂度于不顾。数据库不可用,两个思想方向:
    1. 保证数据库高可用,既然 sql server ,那成熟的 always on 体系砸就是了。
    2. 若是真的没法保证(成本因素 or 技术难题),数据库不可用就该让他不可用,保证 RPO=0(数据恢复点,就是不能丢数据不能错数据),然后才是尽量缩短 RTO(业务恢复时间)
    不然,照着主库能挂然后靠 redis 来缓解,那么面临的必然是时间段内的数据不一致,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5430 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 08:18 PVG 16:18 LAX 00:18 JFK 03:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86