• redis-Modules(TairHash)


    Redis的Module

    Redismodule 是 Redis 4.0 加入的。Redis modules 可以使用外部模块扩展 Redis 功能,并以与内核本身内部功能类似的速度快速实现新的 Redis 命令。

    Redis 模块系统是动态库,可以在 Redis 启动或者使用MODULE LOAD命令时加载到 Redis 中。Redis 以单个 叫redismodule.h的C 头文件开放 C API,模块系统使用 C 语言编写,但是可以使用 C++ 或者其他具有绑定 C 功能的语言。

    一个较为简单的Example

    😓大学的C忘的差不多了,还是知识不够牢固。本想按照官网咔咔咔操作一遍,发现始终load不了,有时间要补一补这Mac下这动态链接的知识


    小提问:你是否曾想过使用redis的Map结构来节省内存,但是又因为field不能过期而不得不做兼容?

    我是有的,网上也有许多文章在节约redis内存的时候建议使用hash代替string,这样可以充分利用map底层的ziplist来达到空间压缩的作用 redis探秘:选择合适的数据结构,减少80%的内存占用,这些点你get到了吗?

    可惜Map有个缺点,field没有过期时间

    这就有点痛苦了!!!


    在这里插入图片描述

    本着程序猿的原则(实际上是搬砖找到了 哈哈哈哈哈~),

    发现了reids的module,然后同时发现了 TairHash 这个redis的moudle.

    它强在实现了field可以过期的方法(果然得跟大佬多学习)

    接下来,让我CV一段它的介绍哈

    TairHash是基于redis module开发的一种hash数据结构,和redis原生的hash数据结构相比,TairHash不但和原生hash一样具有丰富的数据接口和高性能,还可以为field设置过期时间和版本,这极大的提高了hash数据结构的灵活性,在很多场景下可以大大的简化业务开发。TairHash提供active expire机制,即使field在过期后没有被访问也可以被主动删除,释放内存。

    剩下的有中文的介绍,有兴趣可以研究下哈

    它有docker的运行方式,懒人福利哇
    1. 执行脚本命令如下:
    docker rm -f redismodule
    docker run -d -p 6380:6379 --name=redismodule tairmodule/tairhash:latest
    
    • 1
    • 2
    1. 编写代码程序进行验证
    package main
    
    import (
       "fmt"
       "github.com/garyburd/redigo/redis"
       "time"
    )
    
    var (
       RD = redis.Pool{
          Dial: func() (conn redis.Conn, err error) {
             conn, err = redis.Dial("tcp", "127.0.0.1:6380")
             return
          }}
    )
    
    func main() {
       //1.获取redis的链接
       conn := RD.Get()
       defer conn.Close()
       //2.存储到redis中,结果为 [1 ]
       reply, err := conn.Do("EXHSET", "key", "field", "value", "ex", "10")
       fmt.Println(reply,err)
       //3.从redis中获取数据,结果为 [value ]
       reply, err = conn.Do("EXHGET", "key", "field")
       fmt.Println(redis.String(reply,err))
       //4.简单睡10s,看还能否取到值
       time.Sleep(10*time.Second)
       //5.再次从redis中获取数据,结果为 [ redigo: nil returned]
       reply, err = conn.Do("EXHGET", "key", "field")
       fmt.Println(redis.String(reply,err))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    感兴趣的可以亲自试试,先不考虑其性能的情况下,该设计还是十分方便的。

    参考文章:

  • 相关阅读:
    【PyQt】PyQt入门安装和Hello World
    javascript开发经验小结
    【MySQL】(七)SQL约束——主键约束、非空约束、唯一约束、默认值约束、外键约束
    职场人的拖延症晚癌克星来啦 当当狸时间管理器
    vue指令 (侦听器)
    2022流星雨,你的硬盘raw了吗?
    关于四元数与欧拉角协方差阵转换的一些思考
    Android ANR问题定位 实战
    车载电子电器架构 —— 电气架构释放检查
    利用IP风险画像强化金融行业网络安全防御
  • 原文地址:https://blog.csdn.net/weixin_42854904/article/details/126713970