redis作为mysql缓存

1.redis与mysql之间关系

读取步骤:

(1)client读取redis,若查到则返回结果;反之,进行第2步骤。

(2)client读取数据库,在数据库中若查到,则读取返回结果并更新至redis中;反之,若未查到则返回空。

写入步骤:

(1)client增删改数据到mysql。

(2)mysql触发器调用用户自定义的UDF。

(3)UDF把增删改的数据更新到redis中。

 

2.redis和mysql实现环境

(1)redis相关软件

切换目录:cd /usr/local/redis/bin

redis-cli、redis-server、gcc版本均已安装,具体安装参照https://blog.csdn.net/weixin_47427038/article/details/110306159

拓展:

redis-benchmark:压力测试工具

redis-check-aof:检查redis持久化命令文件的完整性

redis-check-rdb:检查redis持久化数据文件的完整性

redis-cli:redis在linux下的客户端

redis-sentinel -> redis-server:redis-sentinel是集群管理工具,主要负责主从切换

redis-server:redis服务器的daemon启动程序

(2)mysql相关软件

切换目录:cd /usr/lib/systemd/system

mysql-server,mysql-devel已安装,具体安装参照:https://blog.csdn.net/weixin_47427038/article/details/110490494

 

3.登录redis

切换目录:cd /usr/local/redis/bin/

启动redis:./redis-server /usr/local/bin/redis-cluster/6001/redis.conf

登录redis:./redis-cli -h 192.168.229.130 -c -p 6001

验证redis:hgetall www2

 

4.创建mysql数据库脚本

切换目录:cd /usr/local/mysql/

创建文件:touch myredis.sql

编辑文件:vim myredis.sql

drop database if exists mysqlRedis;
create database mysqlRedis;
use mysqlRedis;
create table test1(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(64),age INT,description VARCHAR(1000),primary key(id));

重新打开一个xshell窗口,切换目录:cd /usr/lib/systemd/system

登录数据库:mysql -u root -p,回车,输入密码,回车

输入命令:source /usr/local/mysql/myredis.sql;

拓展:数据库中也可以直接进行增删改查操作。

 

5.创建UDF.c文件

(1)切换目录:cd /usr/local/mysql/

(2)创建文件:touch UDF.c

(3)编辑文档内容:vim UDF.c

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#include <string.h>
#include </usr/local/redis-5.0.4/deps/hiredis/hiredis.h>

int gxupdate(UDF_INIT * initid, UDF_ARGS * args, char * is_null, char * error) {
        redisContext * c = redisConnect("192.168.229.130", 6001);
        if(c->err) {
                redisFree(c);
                return 1;
        }

        const char * command1 = "HMSET w3ckey name %s description %s likes %d visitors %d";
        redisReply * r = (redisReply *) redisCommand(c, command1,
            args->args[2], args->args[4], *(int *)args->args[1], *(int *)args->args[3]);
        if(r == NULL) {
            return 1;
        }
        if(!((r->type == REDIS_REPLY_STATUS) && (strcasecmp(r->str, "OK") == 0))) {
             freeReplyObject(r);
             redisFree(c);
             return 1;
        }
        freeReplyObject(r);
        return 0;
}

my_bool gxupdate_init(UDF_INIT * initid, UDF_ARGS * args, char * message) {
        return 0;
}

(4)编译UDF.c文档:gcc -shared -fPIC -I /usr/include/mysql -o udfgx.so UDF.c /usr/local/lib/libhiredis.a

出现问题:

解决方法:

查找deps文件:find / -name deps

切换目录:cd /usr/local/redis-5.0.4/deps

进行创建:make lua hiredis linenoise

切换目录:cd /usr/local/mysql/

重新编译:gcc -shared -fPIC -I /usr/include/mysql -o udfgx.so UDF.c /usr/local/redis-5.0.4/deps/hiredis/libhiredis.a

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值