• 大数据笔记(二十)——NoSQL数据库之MemCached



    一、为什么要把数据存入内存?
    1、原因:快
    2、常见的内存数据库
    (*)MemCached:看成Redis的前身,严格来说Memcached的不能叫数据库,原因:不支持持久化
    (*)Redis:内存数据库,持久化(RDB、AOF)
    (*)Oracle TimesTen
    (*)SAP HANA


    二、MemCached缓存技术
    1、基本原理和体系结构


    (*) 就是在内存中,维护一张巨大的Hash表
    (*) MemCached通过一个路由算法(由客户端决定),来决定数据保存到哪一个节点上

    2、安装和配置
    (*) 前提1:安装gcc的编译器
    (*) 前提2:安装libevent
    (1) 确定、删除自带的libevent
    rpm -qa|grep libevent =-==> 确定是否已有
    rpm -e libevent-2.0.21-4.el7.x86_64 --nodeps (不要删除相关的依赖)

    (2) tar -zxvf libevent-2.0.21-stable.tar.gz
    (3) 安装到: /root/training/libevent
    ./configure --prefix=/root/training/libevent
    make
    make install

    (*) 安装MemCached: 官方的版本:memcached-1.4.25.tar.gz
    tar -zxvf memcached-1.4.25.tar.gz
    安装目录:/root/training/memcached
    配置:./configure --prefix=/root/training/memcached --with-libevent=/root/training/libevent
    make
    make install

    (*) 启动:./memcached -u root -d -m 128 -p 11211
    ./memcached -u root -d -m 128 -p 11212
    ./memcached -u root -d -m 128 -p 11213(training/me../bin目录)

    3、操作MemCached
    (1)命令行:telnet (如果mnt下面没有东西,则重新挂载一下光盘)
    (*) 安装telnet:rpm -ivh telnet-0.17-64.el7.x86_64.rpm
    (*) telnet 127.0.0.1 11211
    (*) 插入数据: add/set
    set: 如果key已经存在,会替换原来的值
    add: 如果key已经存在,返回信息(错误): NOT_STROED

    举例:add key1 0 0 4
    key1: key-value的键
    第一个0:标志位
    第二个0:数据过期的时间,0表示永远不过期
    4表示:数据的长度
    统计信息的命令:
    stats
    stats items
    stats slabs

    (2)JAVA API

    4、MemCached路由算法

    由客户端来决定

    (1)求余数路由算法
    缺点:如果需要扩容或者有宕机的情况,会造成数据的丢失。
    举例: 扩容
    3台MemCached ----> 4台MemCached
    key
    1 1 1
    2 2 2
    3 0 3
    4 1 0
    5 2 1
    6 0 2
    7 1 3
    8 2 0
    9 0 1
    10 1 2

    (2)一致性的hash算法

    5、MemCached主主复制功能(双机热备)

    (1)不能使用官方的版本
    一个日本的工程师改写了官方的版本,支持主主复制功能
    memcached-1.2.8-repcached-2.2.tar.gz

    (2)准备两台:bigdata11 bigdata12
    (*) tar -zxvf memcached-1.2.8-repcached-2.2.tar.gz
    (*) ./configure --prefix=/root/training/memcached_replication --with-libevent=/root/training/libevent --enable-replication
    make
    错误:error: ‘IOV_MAX’ undeclared (first use in this function)
    vi memcached.c
    55 /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
    56 #ifndef IOV_MAX
    57 //#if defined(__FreeBSD__) || defined(__APPLE__)
    58 # define IOV_MAX 1024
    59 //#endif
    60 #endif

    make install

    (3) 启动:需要指定对端的Memcached地址: -x参数
    bigdata11: ./memcached -d -u root -m 128 -x bigdata12(/root/training/memcached_replication/bin)
    bigdata12: ./memcached -d -u root -m 128 -x bigdata11

    错误:
    ./memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file:
    No such file or directory

    判断:命令memcached依赖的库有哪些?
    ldd memcached
    linux-vdso.so.1 => (0x00007ffee936b000)
    libevent-2.0.so.5 => not found
    libc.so.6 => /lib64/libc.so.6 (0x00007fc26923e000)
    /lib64/ld-linux-x86-64.so.2 (0x00005579c379b000)

    创建一个连接,让系统的libevent-2.0.so.5 指向我们自己的libevent-2.0.so.5
    (64位系统) ln -s /root/training/libevent/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
    (32位系统) ln -s /root/training/libevent/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5

    telnet退出: ctrl + ]

    如果没有telnet 重新挂载一下光盘: mount /dev/cdrom /mnt,去Package目录下执行:rpm -ivh telnet-0.17-64.el7.x86_64.rpm

  • 相关阅读:
    JavaScript模块化CommonJS/AMD/CMD/UMD/ES6Module的区别
    css属性position: static|relative|absolute|fixed|sticky简单解析
    创建自己的library类库包并使用webpack4.x打包发布到npm
    webpack4与babel配合使es6代码可运行于低版本浏览器
    css设置多列等高布局
    css选择器+、~、>
    将已经存在的异步请求callback转换为同步promise
    js属性对象的propertyIsEnumerable方法
    js中的严格模式和非严格模式的比较
    js将某个值转换为String字符串类型或转换为Number数字类型
  • 原文地址:https://www.cnblogs.com/lingluo2017/p/8657955.html
Copyright © 2020-2023  润新知