设为首页 收藏本站
查看: 810|回复: 0

[经验分享] mysql+memcached 键值数据库

[复制链接]

尚未签到

发表于 2018-12-25 10:50:02 | 显示全部楼层 |阅读模式
  

  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
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655611-1-1.html 上篇帖子: LNMP的编译安装与xcache、memcached的安装配置 下篇帖子: memcached服务搭建及session共享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表