美文网首页
Redis作为Mysql数据库缓存的简单配置

Redis作为Mysql数据库缓存的简单配置

作者: 刘小白DOER | 来源:发表于2021-02-02 22:37 被阅读0次

        在上一篇文章-Redis数据库在树莓派中的简单使用 中完成了Redis数据库的安装使用,这一次更上一层楼,将Redis配置成Mysql数据库缓存,实现读写分离,热点数据直接读取Redis内存数据库,提供快速响应服务。

    简而言之,将insert/update/delete交给MySQL,而select交给redis完成,减轻MySQL压力并提供高并发服务。

    1、mysql/mariadb自带缓存功能,我们先来探索一下。

    运行命令 show variables like '%query_cache%'; 来查看缓存的配置。

    have_query_cache:支持缓存。

    query_cache_size:配置缓存大小,下图为16777216B(字节),16M。

    Query_cache_type:可以是0,1,2,0代表不使用缓存,1代表使用缓存,2代表根据需要使用。

    query_cache_type:缓存开关。

     运行命令 show variables like '%query_cache%'; 来查看缓存的状态。

    Qcache_free_memory:在query_cache_size设置的缓存中的空闲的内存。

    Qcache_hits:缓存的命中次数。

    Qcache_inserts:查询缓存区此前总共缓存过多少条查询命令的结果。

    Qcache_lowmem_prunes:查询缓存区已满而从其中溢出和删除的查询结果的个数。

    Qcache_queries_in_cache: 当前缓存中缓存的SQL数量。

    但是查询缓存会生成碎片,可以通过下面命令来整理碎片, flush query cache。想清理内存中的碎片, reset query cache。

2、业务逻辑层来做简单的缓存

    下面的php代码就是查询redis数据库中key的值(如果没有安装相应的可以搜索笔者以前的文章,php操作mysql和php操作redis),如果没有数据则访问mysql,同时将查询到的数据插入redis中,待下次访问查询时可以查询redis后可以得到缓存的数据。

    这个只是演示做简单的数据缓存,当mysql数据库需要更新或者更新频繁时,这个方法就不合适了。需要将数据更改直接触发写入redis中,这样业务端就可以直接访问redis,不必那么麻烦。

<?php

$servername = "localhost";

$username = "phpmyadmin";

$password = "phpmyadmin";

$dbname = "testdb";

$key = 6;

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

//echo "Connection to server successfully";

if (!$redis->get($key))

{

  $conn = mysqli_connect($servername, $username, $password, $dbname);

  if (!$conn) {

    die("连接失败: " . mysqli_connect_error());

  }

  $sql = "SELECT card_id, card_number FROM card where card_id = 6";

  $result = mysqli_query($conn, $sql);

  if (mysqli_num_rows($result) > 0) {

    // 输出数据

    while($row = mysqli_fetch_assoc($result)) {

        $redis->set($row['card_id'],$row['card_number']);

        echo "id: " . $row["card_id"]. " - number: " . $row["card_number"]."<br>";

    }

  }

  else {

    echo "0 结果";

  }

  $myserver = 'mysql';

  mysqli_close($conn);

}

else

{

    $myserver = "redis";

    $data = $redis->get($key);

}

echo $myserver;

echo "<br>";

echo "id 6,card_number:".$data;

?>

第二次运行结果

3、自动将 MySQL数据同步到Redis

    实现方法就很多了,总结下来有这几种:1、基于mysql的自定义函数(user-defined function UDF)来操作redis的接口,通过mysql触发器Trigger调动UDF来同步数据到Redis;2、第三方插件读取分析mysql的binlog二进制日志,将改变同步到Redis;3、mysql触发器Trigger调用Gearman任务分发,完成redis数据库的更新。

     查看MySQL UDF放置的位置:

    最后笔者就需要借助github了,搜索“redis mysql”,上面有很多同步的开源代码,原理基本都是基于上面三种方法。笔者实验了项目mysql2redis,有库没有装好,失败了,待心情恢复后再来吧!

相关文章

  • Redis作为Mysql数据库缓存的简单配置

    在上一篇文章-Redis数据库在树莓派中的简单使用 中完成了Redis数据库的安装使用,这一次更上一层楼,将R...

  • 缓存

    缓存配置文件 config/cache.php 主流的缓存如:Memcached 和 Redis 数据库 作为缓存...

  • 缓存

    数据库(mySQL..) 本地缓存(osCache..) 分布式缓存(redis,memchched) 数据库本地...

  • redis配置文件

    redis配置优化 整合springCache的文章 redis配置 Redis数据库索引(缓存将使用此索引编号的...

  • Redis缓存和数据库不一致怎么解决

    Redis缓存和数据库不一致怎么解决 不管是先写MySQL数据库,再删除Redis缓存;还是先删除缓存,再写库,都...

  • 缓存

    配置缓存 说明:通过Redis底层提供的额多个数据库用来隔离缓存数据有助于缓存数据的管理,如果配置了Redis的主...

  • Redis缓存击穿和缓存穿透

    1.缓存穿透:Redis中没有数据,MySQL中也没有数据 2.Redis缓存击穿:Redis中没有数据,数据库中...

  • Redis缓存雪崩、穿透和击穿

    Redis在日常生产中大多数情况下作为某一种数据库的缓存使用,而业务中使用最多的数据库就是MySQL。MySQL+...

  • redis 系列(一)- redis的入门与安装

    redis 是什么 redis是缓存数据库(key-value类型),和关系数据库(比如mysql)不同的是,re...

  • redis知识汇总

    相对mysql数据库将数据以文件形式存储在硬盘里不同,redis作为内存高速缓存数据库,数据模型为key=>val...

网友评论

      本文标题:Redis作为Mysql数据库缓存的简单配置

      本文链接:https://www.haomeiwen.com/subject/yxbstltx.html