mysql+memcached 键值数据库

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

key value 键值数据库


内存中心化设计

内存中心化设计是一种进来十分流行的架构,用于解决web2.0时代数据大量读写带来的性能压力。

实现思路:

增加缓冲层,利用内存的高I/O性能

将大量的实时数据以key_value的形式在内存中处理

通过预读和合并写入等技术减少后端数据库的IO压力


key-value数据库简介

memcached 与redis


什么是memcached?

memcached 是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库负载。他通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态,数据库驱动网站的速度。

memcached 基于一个存储键/值对的hashmap。 


web

|

memcached

|

mysql


memcached语法

memcached的服务器客户端通信兵不使用复杂的XML等格式,而是使用简单的基于文本行的协议。因此也可以用telnet在memcached上保存数据,取得数据。

 memcached -d -c 10240 -m 1024 -u root 

  247  ps -ef|grep memcached

  248  telnet 127.0.0.1 11211

  249  yum install telnet -y

  250  telnet 127.0.0.1 11211


mysql-memcached 之间通常没有直接联系,是通过应用程序或者中间件决定的

mysql5.6中加入了一个全新的memcached插件,通过该插件可以非常方便实现mysql与memcached的组合。使得我们可以用memcached语法操作msyql数据库,也可以使用SQL语法来操作memcached,实现了mysql对于nosql的支持

memcached Plugin:innodb——memcached、local cache



基于mysql官方插件的memcached的实现 


安装:

如果使用的官方发布的rpm包安装的mysql,那么memcached插件已经附带mysql-server包中了

如果是源码包  安装mysql,则需要在编译过程中加入对应配置项

另外系统中要安装libevent包

cmake -DWITH_INNODB_MEMCACHED=ON



以mysql  rpm包来讲 或者二进制包来讲

1,先查看插件存储目录,以及文件

mysql> select @@plugin_dir;

+------------------------------+

| @@plugin_dir                 |

+------------------------------+

| /usr/local/mysql/lib/plugin/ |

+------------------------------+

1 row in set (0.00 sec)


mysql> Ctrl-C -- exit!

Aborted

[root@host1 ~]# ls /usr/local/mysql/lib/plugin/ | grep memcached

libmemcached.so


2,导入表结构

接下来,导入memcached插件所需要的表结构

[root@host1 ~]# find / -name innodb_memcached_config.sql

/usr/local/mysql/share/innodb_memcached_config.sql

mysql -h 127.0.0.1 -p < /usr/local/mysql/share/innodb_memcached_config.sql

 mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| innodb_memcache    | ********

| mysql              |

| performance_schema |

| t9                 |

| test               |

| viewdb             |

+--------------------+

mysql> use innodb_memcache

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Database changed

mysql> show tables;

+---------------------------+

| Tables_in_innodb_memcache |

+---------------------------+

| cache_policies            | 

| config_options            |

| containers                |

+---------------------------+




3,加载、下载插件命令

之后在mysql中加载插件,使用install命令加载也可以使用uninstall卸载

如果需要重启插件,则需要先uninstall,然后在install

mysql> install plugin daemon_memcached soname 'libmemcached.so';

Query OK, 0 rows affected (0.25 sec)

mysql>uninsall plugin daemon_memcached;


4,查看插件配置信息

mysql> show variables like '%memcache%';

  

+----------------------------------+------------------+

| Variable_name                    | Value            |

+----------------------------------+------------------+

| daemon_memcached_enable_binlog   | OFF              |  是否把memcached操作的数据记录在binlog中,默认是关闭

| daemon_memcached_engine_lib_name | innodb_engine.so | 

| daemon_memcached_engine_lib_path |                  |

| daemon_memcached_option          |                  |

| daemon_memcached_r_batch_size    | 1                |

| daemon_memcached_w_batch_size    | 1                |

+----------------------------------+------------------+

6 rows in set (0.00 sec)


5.检查memcached状态

[root@host1 ~]# ps axu | grep memcached

root     10783  0.0  0.0 331864   136 ?        Ssl  Jan20   0:01 memcached -d -c 10240 -m 1024 -u root

root     12570  0.0  0.1 103244   836 pts/2    S+   01:39   0:00 grep memcached

[root@host1 ~]# netstat -tnlp  | grep 11211

tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      10783/memcached     

tcp        0      0 :::11211                    :::*                        LISTEN      10783/memcached 


6,innodb_memcache 库

导入插件所需要的表结构后,会在数据库中建一个名为innodb_memcache的库,

  cache_policies      定义缓冲策略      | 

| config_options      定义分隔符        |

| containers          容器


cache_policies :

mysql> select * from cache_policies;

+--------------+-------------+-------------+---------------+--------------+

| policy_name  | get_policy  | set_policy  | delete_policy | flush_policy |

+--------------+-------------+-------------+---------------+--------------+

| cache_policy | innodb_only | innodb_only | innodb_only   | innodb_only  |

+--------------+-------------+-------------+---------------+--------------+

1 row in set (0.00 sec)


cache_police表

cache_police 定义了缓存策略,包含如下选择:

innodb_only:只是用innodb作为数据存储。

cache_only:只使用传统的memcached引擎作为后端存储、

caching:二者皆使用,如果在memcached里找,如找不到,就查询innodb


mysql> update cache_policies set get_policy='caching';  先查cache,如果没在查innodb,最后在缓存到cache中

Query OK, 1 row affected (0.04 sec)

Rows matched: 1  Changed: 1  Warnings: 0


mysql> select * from cache_policies;

+--------------+------------+-------------+---------------+--------------+

| policy_name  | get_policy | set_policy  | delete_policy | flush_policy |

+--------------+------------+-------------+---------------+--------------+

| cache_policy | caching    | innodb_only | innodb_only   | innodb_only  |

+--------------+------------+-------------+---------------+--------------+

1 row in set (0.00 sec)


  config_options :

config_options定义了分隔符:

separate:memcached只是识别单值,使用此分隔符(|)来连接字段的值

table_map_delimiter:通过此分隔符(.)来确认表和键,如:@@table.key


mysql> select * from config_options;

   

+---------------------+-------+

| name                | value |

+---------------------+-------+

| separator           | |     | 字段分割符号

| table_map_delimiter | .     |  表

+---------------------+-------+

 

containers表

mysql> select * from containers;

+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+

| name | db_schema | db_table  | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |

+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+

| aaa  | test      | demo_test | c1          | c2            | c3    | c4         | c5                 | PRIMARY                |

+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+

1 row in set (0.00 sec)


memcached 语法简介-参数

key              用于查找缓存值

flags            可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息、

expiration       在缓存中保存键值对的时间长度

bytes            在缓存中存储的字节数

value             存储的值


语法:

set 用于向缓存添加新的键值对。如果已存在,则替换之前新的。

set UId 0 0 5


add 仅当缓存不存在键时候,add命令才会向缓冲中添加一个键值对,如果缓存中已经存在键,则之前的值将任然保持相同,并且将活动not_stored


get   查询键值对

replace  专门更新现有的键值对


delete 用于删除memcached中饭任何现有的值,如果存在于缓存中,则删除该值,如果不存在,则返回not_found


高级语法:

gets  返回的信息多、

cas (check & set) 是一个非常便捷的memcached命令,用设置名称,

flush——all    用于清理缓存中的所有名称、值对(慎用,和delete一样会删除数据库中数据)

status 状态

stats命令用于调优缓存的使用


mysql>update cache_policies set flush_policy='cache_only';   以后在memcached中做flush_all操作的时候,只操作cache,而不操作数据库的表数据


将某个表加入memcached中:

step1:

扩充原有表的字段,使其符合memcached插件要求

step2:

在containers表中增加新的配置

step3:

检查结果


step1

使用memcached缓存的表需要附加多个字段,用于存储memcached数据参数值

alter table t111 add ( flags int , cas_column bigint, extime int );

alter table t111 add primary key(id);


insert into innodb_memcache.containers values( 'users','viewdb','t111','id','name','flags','cas_cloumn','extime','PRIMARY');

select * from innodb_memcache.containers\G;

nc 127.0.0.1 11211

 get @@users.1







      本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1613253,如需转载请自行联系原作者



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
15天前
|
存储 关系型数据库 MySQL
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
|
23天前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
28天前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
27天前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
2月前
|
存储 SQL 关系型数据库
从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?
TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务,轻松应对海量功率、电能及输入输出数据的实时统计与分析,并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外,taosX 强大的 transform 功能帮助用户完成原始数据的清洗和结构优化,而其零代码迁移能力更实现了历史数据从 TDengine OSS 与 MySQL 到 TDengine 企业版的平滑迁移,全面提升了企业的数据管理效率。本文将详细解读这一实践案例。
68 0
|
2月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
442 82
|
4月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
2月前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)