当前位置: 欣欣网 > 码农

可平替 Redis ,微软开源 Garnet 缓存

2024-03-21码农

garnet 是什么

最近,微软正式开源了缓存存储系统 Garnet [1] 。据微软官方介绍,Garnet 项目是从零开始采用 C# 构建的,注重性能(尤其是吞吐量中的线程可扩展性和更高比例的低延迟水平)。

Garnet 比 Redis 更优秀的原因主要是它针对现代硬件进行了优化。Garnet 设计时考虑了现代多核处理器和高速网络的特点,使其在处理大量客户端连接和小批量数据时能够提供更高的吞吐量和更低的延迟。此外,Garnet 的架构使得它能够更有效地利用处理器缓存,从而提高性能。这些优化使得 Garnet 在现实的网络环境中表现更加出色。--FROM InfoQ

安装

  • 目前 garnet 只提供了 nupkg 的依赖包,暂未提供官方的镜像下载地址,笔者已在 Visual Studio 2022 编译 x86 已上传至 dockerhub

  • docker run -p 3278:3278 -d pig4cloud/garnet:latest

    测试使用

  • 使用本地的 redis-cli 客户端即可链接 Garnet , 兼容 redis 协议。

  •  ~  redis-cli -p 3278
    127.0.0.1:3278> info
    # Server
    garnet_version:1.0.0
    garnet_mode:standalone
    os:Unix 6.5.13.121
    processor_count:8
    arch_bits:64
    uptime_in_seconds:20.9056586
    uptime_in_days:0.0002419636412037037
    monitor_task:disabled
    monitor_freq:0
    latency_monitor:disabled
    run_id:6e00f92a00c16e2ad992353b7fef27d6a36e1a60
    ...

  • get set

  • 127.0.0.1:3278> set k1 v1
    OK
    127.0.0.1:3278> get k1
    "v1"

  • 命令支持列表

  • 关键词
    BITMAP
    CLUSTER
    CONNECTION
    FUNCTIONS
    GENERIC
    GEO
    HASH
    HYPERLOGLOG
    KEYS
    LIST
    PUB/SUB
    SCRIPTING
    SERVER
    SET
    SORTED SET
    STREAM
    STRING
    TRANSACTIONS

    Java 项目平替 Redis 操作

    这里以 PIG 微服务开发平台 [2] 为例,项目基本使用了 Redis 常见命令 SET HASH PUB/SUB 等:

  • 只需要修改配置文件中的 redis 的配置指向 Garnet Server 即可, 链接驱动保持 spring-boot-starter-data-redis 即 lettuce 不变。

  • 127.0.0.1:3278> keys *
    1) "k1"
    2) "client:details::pig"
    3) "menu_details::1"
    4) "menu_details::2"
    5) "user_details::admin"
    6) "token::refresh_token::skVN2wyPrH3SV607JOLau1MED6VdXH0WOojq1A57fH2EtL2kdTaEmaVd8n24aL89uCUTeR32fKrTXi07nCBBfXB5pNUNDs9eHWgl-AjCQLXd08Z8qK0RBNwk2nqsqCrM"
    7) "token::access_token::NGcjsiHNIAhdH0pSZwz2WTyKhxtzrFzjYCpO3MhG4nX2Nmsj9aqO6OVOlGvNGczAgYGztaU-3kTKpuyf7awUpMq7YbIDCNs8o2gIqqtGC2-dRGsJfj3wsGp834iRSQ9j"
    8) "DEFAULT_CODE_KEY:84156608-9595-46c6-93c4-990828437d16"
    (1.45s)

    总结

    官方表示: 任何「使用 Redis、KeyDB 或者 Dragonfly 作为缓存存储方案的现有应用程序都适合 Garnet , 能提供更高的吞吐量、更低延迟、通过减少需要托管的缓存存储分片来降低成本,还可将数据溢出至本地磁盘或 SSD 以缓存超过内存大小的数据。此外,Garnet 也适合各种希望借极高性能缓存层提高性能、降低后端存储服务器或数据库成本的新型应用程序。」

    参考资料

    [1]

    Garnet: https://github.com/microsoft/garnet

    [2]

    PIG 微服务开发平台: https://gitee.com/log4j/pig