mysql_redis在 MySQL 中操作 Redis 

联合创作 · 2023-10-01 00:27

MySQL-Redis

什么是 MySQL-Redis ?

MySQL-Redis 是一款可以在 MySQL 中操作 Redis 的一个UDF (MySQL 用户自定义函数插件)

MySQL-Redis 可以操作 Redis 集群吗?

可以的, MySQL-Redis 可以操作单例或者集群 Redis,操作的唯一的区别就是 MySQL 函数不一样而已

性能怎么样?

性能这个取决于网络, 实例操作 Redis 速度很快。因为使用 C 语言开发

使用场景 ?

可以使用在需要 Redis 和 MySQL 数据一致性的地方。

示例

SELECT RedisConnect("127.0.0.1", 6379);

BEGIN;

UPDATE books SET price = 10.5 WHERE id = 10;
SELECT RedisRawCommand("SET id:10:price 10.5");

COMMIT;

SELECT RedisConnectFree();

上面示例展示了,在事务中处理数据,达到 Redis 和 MySQL 数据一致性的解决办法,当然也可以在触发器中使用。

MySQL-Redis 函数

  • RedisConnect("127.0.0.1", 6379)

    单例 Redis 连接,第二个参数可以省略,默认端口 6379

    对应 SQL 代码:

    SELECT RedisConnect("127.0.0.1", 6379);
  • RedisClusterConnect

    Redis 集群连接

    对应 SQL 代码:

    SELECT RedisClusterConnect("127.0.0.1:6379,127.0.0.2:6379");

    多个机器之间采用,隔开

  • RedisConnectFree

    对应 RedisConnect() 的连接释放

    操作完成后,如果需要手动释放,需要调用本方法,目前暂未实现连接池,后续版本实现

    对应 SQL 代码:

    SELECT RedisConnectFree();
  • RedisClusterConnectFree

    对应 RedisClusterConnect() 的连接释放

    操作完成后,如果需要手动释放,需要调用本方法,目前暂未实现连接池,后续版本实现

    使用方法:

    SELECT RedisClusterConnectFree();
  • RedisSet

    设置键值对的快捷方法

    对应 SQL 代码:

    SELECT RedisSet("a", 1); -- 等同于 Redis中的语句: SET a 1
  • RedisClusterSet

    设置键值对的集群方法方法,参数等同于 RedisSet 函数,见上面

  • RedisExecCommand

    执行 Redis 语句,包含三个或者两个参数,如下 SQL:

    三个参数的 SQL 方法:

    SELECT RedisExecCommand("SET", "a", 1);

    两个参数的 SQL 方法:

    SELECT RedisExecCommand("SELECT", 1);
  • RedisClusterExecCommand

    集群操作方法,参数等同于上面单例:RedisExecCommand

  • RedisRawCommand

    执行 Redis 语句,由用户提供一个完整的 Redis 语句

    SQL 代码如下:

    SELECT RedisRawCommand("SET Hello World");
  • RedisClusterRawCommand

    集群模式的 RedisClusterRawCommand 方法,参数等同于 单例的 RedisRawCommand

  • RedisListIndex

    获取 Redis List 数据结构的某一项,第一项表示 Redis 数据结构,第二项表示索引值,如:

    SELECT RedisListIndex(RedisRawCommand("LRANGE score_lists 0 10"), 1);
  • RedisListJoin

    将 Redis List 数据结构的所有项通过第二个参数合并为一个字符串,如:

    SELECT RedisListJoin(RedisRawCommand("LRANGE score_lists 0 10"), "-");
    // 假设 Redis List score_lists结构如下:
    // 0 1 2
    // 那么合并结果:
    // 0-1-2

返回值

1:

RedisSET 、 RedisClusterSet 、RedisConnect 、RedisConnectFree 、 RedisClusterConnect 、 RedisClusterConnectFree 成功的情况下返回 1,否则 SQL 语句错误

2:

RedisExecCommand 、 RedisClusterExecCommand 、RedisRawCommand 、RedisClusterRawCommandRedisListIndex 、RedisListJoin 返回字符串,具体如下:

  • OK

    在执行 Redis SET 命令的时候返回 "OK" 表示成功,否则就表示错误信息

  • 其他字符串

    执行 GET 命令的时候 返回具体值

怎么安装 ?

前提条件:

电脑安装 Redis 、MySQL (开发机器 MySQL 5.7.22)、hiredis-vip

准备好前提条件后,开始 MySQL-Redis 插件的编译安装过程

  1. git clone 代码库

    git clone  https://gitee.com/josinli/mysql_redis.git
  2. 修改 CMakeLists.txt 文件,因为代码库采用 CMake 编译系统:

    cmake_minimum_required(VERSION 3.13)
    project(udf_str C)
    
    set(CMAKE_C_STANDARD 99)
    
    include_directories(
        .
        /usr/local/mysql/include/      # 把这行更改为您系统安装mysql的头文件目录
        /usr/local/include/hiredis-vip # 把这行更改为您系统安装hiredis-vip的头文件目录
    )
    
    link_directories(
        /usr/local/lib    						 # 把这行更改为您洗的 hiredis-vip的lib安装目录
    )
    
    add_library(udf_redis SHARED library.c library.h)
    
    target_link_libraries(udf_redis hiredis_vip)
  3. 更改完成后,执行下面的操作

    cd build
    cmake ..
    make 
  4. 可以看到 build 目录生成了库文件 libudf_redis.so 或者 libudf_redis.dylib

  5. 进入您的 MySQL,执行如下 SQL 语句找到您的 MySQL 插件目录:

    SHOW VARIABLES LIKE 'plugin_dir%';
  6. 拷贝上面第四步中的 libudf_redis.so 或者 libudf_redis.dylib 到第五步中的目录中

  7. 针对您的系统,linux 系统拷贝 create_function_linux.sql 或者 OSX 系统拷贝 create_function_osx.sql 并执行

  8. 重启您的 MySQL,开始在 SQL 中愉快的体验 Redis 吧!

浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报