mysql_redis在?MySQL?中操作?Redis?
MySQL-Redis
什么是 MySQL-Redis ?
MySQL-Redis 是一款可以在 MySQL 中操作 Redis 的一個(gè)UDF (MySQL 用戶自定義函數(shù)插件)
MySQL-Redis 可以操作 Redis 集群?jiǎn)幔?/h3>
可以的, MySQL-Redis 可以操作單例或者集群 Redis,操作的唯一的區(qū)別就是 MySQL 函數(shù)不一樣而已
性能怎么樣?
性能這個(gè)取決于網(wǎng)絡(luò), 實(shí)例操作 Redis 速度很快。因?yàn)槭褂?C 語(yǔ)言開(kāi)發(fā)
使用場(chǎng)景 ?
可以使用在需要 Redis 和 MySQL 數(shù)據(jù)一致性的地方。
示例
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();
上面示例展示了,在事務(wù)中處理數(shù)據(jù),達(dá)到 Redis 和 MySQL 數(shù)據(jù)一致性的解決辦法,當(dāng)然也可以在觸發(fā)器中使用。
MySQL-Redis 函數(shù)
-
RedisConnect("127.0.0.1", 6379)
單例 Redis 連接,第二個(gè)參數(shù)可以省略,默認(rèn)端口 6379
對(duì)應(yīng) SQL 代碼:
SELECT RedisConnect("127.0.0.1", 6379); -
RedisClusterConnect
Redis 集群連接
對(duì)應(yīng) SQL 代碼:
SELECT RedisClusterConnect("127.0.0.1:6379,127.0.0.2:6379");多個(gè)機(jī)器之間采用
,隔開(kāi) -
RedisConnectFree
對(duì)應(yīng) RedisConnect() 的連接釋放
操作完成后,如果需要手動(dòng)釋放,需要調(diào)用本方法,目前暫未實(shí)現(xiàn)連接池,后續(xù)版本實(shí)現(xiàn)
對(duì)應(yīng) SQL 代碼:
SELECT RedisConnectFree();
-
RedisClusterConnectFree
對(duì)應(yīng) RedisClusterConnect() 的連接釋放
操作完成后,如果需要手動(dòng)釋放,需要調(diào)用本方法,目前暫未實(shí)現(xiàn)連接池,后續(xù)版本實(shí)現(xiàn)
使用方法:
SELECT RedisClusterConnectFree();
-
RedisSet
設(shè)置鍵值對(duì)的快捷方法
對(duì)應(yīng) SQL 代碼:
SELECT RedisSet("a", 1); -- 等同于 Redis中的語(yǔ)句: SET a 1 -
RedisClusterSet
設(shè)置鍵值對(duì)的集群方法方法,參數(shù)等同于 RedisSet 函數(shù),見(jiàn)上面
-
RedisExecCommand
執(zhí)行 Redis 語(yǔ)句,包含三個(gè)或者兩個(gè)參數(shù),如下 SQL:
三個(gè)參數(shù)的 SQL 方法:
SELECT RedisExecCommand("SET", "a", 1);兩個(gè)參數(shù)的 SQL 方法:
SELECT RedisExecCommand("SELECT", 1); -
RedisClusterExecCommand
集群操作方法,參數(shù)等同于上面單例:RedisExecCommand
-
RedisRawCommand
執(zhí)行 Redis 語(yǔ)句,由用戶提供一個(gè)完整的 Redis 語(yǔ)句
SQL 代碼如下:
SELECT RedisRawCommand("SET Hello World"); -
RedisClusterRawCommand
集群模式的 RedisClusterRawCommand 方法,參數(shù)等同于 單例的 RedisRawCommand
-
RedisListIndex
獲取 Redis List 數(shù)據(jù)結(jié)構(gòu)的某一項(xiàng),第一項(xiàng)表示 Redis 數(shù)據(jù)結(jié)構(gòu),第二項(xiàng)表示索引值,如:
SELECT RedisListIndex(RedisRawCommand("LRANGE score_lists 0 10"), 1); -
RedisListJoin
將 Redis List 數(shù)據(jù)結(jié)構(gòu)的所有項(xiàng)通過(guò)第二個(gè)參數(shù)合并為一個(gè)字符串,如:
SELECT RedisListJoin(RedisRawCommand("LRANGE score_lists 0 10"), "-"); // 假設(shè) Redis List score_lists結(jié)構(gòu)如下: // 0 1 2 // 那么合并結(jié)果: // 0-1-2
返回值
1:
RedisSET 、 RedisClusterSet 、RedisConnect 、RedisConnectFree 、 RedisClusterConnect 、 RedisClusterConnectFree 成功的情況下返回 1,否則 SQL 語(yǔ)句錯(cuò)誤
2:
RedisExecCommand 、 RedisClusterExecCommand 、RedisRawCommand 、RedisClusterRawCommand、RedisListIndex 、RedisListJoin 返回字符串,具體如下:
-
OK
在執(zhí)行 Redis SET 命令的時(shí)候返回 "OK" 表示成功,否則就表示錯(cuò)誤信息
-
其他字符串
執(zhí)行 GET 命令的時(shí)候 返回具體值
怎么安裝 ?
前提條件:
電腦安裝 Redis 、MySQL (開(kāi)發(fā)機(jī)器 MySQL 5.7.22)、hiredis-vip
準(zhǔn)備好前提條件后,開(kāi)始 MySQL-Redis 插件的編譯安裝過(guò)程
-
git clone 代碼庫(kù)
git clone https://gitee.com/josinli/mysql_redis.git
-
修改 CMakeLists.txt 文件,因?yàn)榇a庫(kù)采用 CMake 編譯系統(tǒng):
cmake_minimum_required(VERSION 3.13) project(udf_str C) set(CMAKE_C_STANDARD 99) include_directories( . /usr/local/mysql/include/ # 把這行更改為您系統(tǒng)安裝mysql的頭文件目錄 /usr/local/include/hiredis-vip # 把這行更改為您系統(tǒng)安裝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) -
更改完成后,執(zhí)行下面的操作
cd build cmake .. make
-
可以看到 build 目錄生成了庫(kù)文件 libudf_redis.so 或者 libudf_redis.dylib
-
進(jìn)入您的 MySQL,執(zhí)行如下 SQL 語(yǔ)句找到您的 MySQL 插件目錄:
SHOW VARIABLES LIKE 'plugin_dir%';
-
拷貝上面第四步中的 libudf_redis.so 或者 libudf_redis.dylib 到第五步中的目錄中
-
針對(duì)您的系統(tǒng),linux 系統(tǒng)拷貝 create_function_linux.sql 或者 OSX 系統(tǒng)拷貝 create_function_osx.sql 并執(zhí)行
-
重啟您的 MySQL,開(kāi)始在 SQL 中愉快的體驗(yàn) Redis 吧!
