分布式缓冲之memcache

1.memcache简介memcache是danga.com的一个项目,它是一款开源的高性能的分布式内存对象缓存系统,,最早是给LiveJournal提供服务的,后来逐渐被越来越多的大型网站所采用

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

1. memcache简介

  memcache是danga.com的一个项目,它是一款开源的高性能的分布式内存对象缓存系统,,最早是给LiveJournal提供服务的,后来逐渐被越来越多的大型网站所采用,用于在应用中减少对数据库的访问,提高应用的访问速度,并降低数据库的负载。

  分布式缓冲之memcache

  为了在内存中提供数据的高速查找能力,memcache使用key-value形式存储和访问数据,在内存中维护一张巨大的HashTable,使得对数据查询的时间复杂度降低到O(1),保证了对数据的高性能访问,内存的空间总是有限的,当内存没有更多的空间来存储新的数据时,memcache就会使用LRU(Least Recently Used)算法,将最近不常用的数据淘汰掉,以腾出空间来存放新的数据。memcache存储支持的数据个事业是灵活多样的,通过对象的序列化机制,可以将更高层抽象的对象转换为二进制数据,存储在缓存服务器中,当前端应用需要时,又可以通过二进制内容反序列化,将数据还原成原有对象。

2. memcache安装

  由于memcache使用了libevent来进行高效的网络链接处理,因此在安装memcache之前,需要安装libevent

  下载libevent,这里采用的是1.4.14版本的libevent

wget https://github.com/downloads/libevent/libevent/libevent-1.4.14b-stable.tar.gz

解压:
tar -xf llibevent-1.4.14b-stable.tar.gz

配置、编译、安装libevent:
./configure

make

sudo make install 

  下载memcache,并解压

wget http://www/memcache.org/files/memcache-1.4.17.tar.gz
tar -xzvf memcache-1.4.17.tar.gz

配置、编译、安装memcache:
./configure

make

sudo make install 

3. memcache启动和关闭

(1)启动memcache服务

/use/local/bin/memcache -d -m 10 -u root -l 192.168.1.10 -p 11211 -c 32 -p /tem/memcached.pid

@ -d:表示启动一个守护进程

@ -m:指定分配给memcache的内存数量,单位为MB,这里指定的是10MB

@ -u:用户名

@ -l:ip

@ -p:port

@ -c:最大运行的并发连接数

@ -P:指定memcache的pid文件保存的位置

(2)关闭memcache服务

kill `cat /tmp/memcached.pid`

4. memcache支持读取/写入数据方式

(1)set将数据保存到缓存服务器,如果缓冲服务器存在同样的key,则替换之

(2)add将数据保存到缓存服务器,如果缓冲服务器存在同样的key,则新增失败

(3)replace将数据替换缓冲服务器中的相同的key,如果缓冲服务器中不存在同样的key,则替换失败

(4)append将数据追加到已经存在的数据后面

(5)prepend将数据追加到已经存在的数据的前面

(6)cats提供对变量的cas操作,它将保证在进行数据更新之前,数据没有被其它人更改

(7)get从缓存服务器获取数据

(8)iner对计数器进行增量操作

(9)decr对计数器进行减量操作

(10)delete将缓存服务器上的数据删除

5. memcache C/C++客户端库libmemcached

(1)下载libmemcached,下载地址:https://launchpad.net/libmemcached/+download

(2)我下载的是libmemcached-1.0.17.tar.gz

(3)解压、配置、安装

cd /usr/local 
tar -vzxf libmemcached-1.0.17.tar.gz

./confiure
make
sudo make install

 安装目录 /usr/local/include /usr/local/lib

6. libmemcached API

分布式缓冲之memcache
分布式缓冲之memcache

/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: * * Libmemcached library * * Copyright (C) 2011 Data Differential, http://datadifferential.com/ * Copyright (C) 2006-2009 Brian Aker All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * * The names of its contributors may not be used to endorse or * promote products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #pragma once /* This seems to be required for older compilers @note http://stackoverflow.com/questions/8132399/how-to-printf-uint64-t */ #ifndef __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS #endif #ifdef __cplusplus # include <tr1/cinttypes> # include <cstddef> # include <cstdlib> #else # include <inttypes.h> # include <stddef.h> # include <stdlib.h> # include <stdbool.h> #endif #include <sys/types.h> #include <libmemcached-1.0/visibility.h> #include <libmemcached-1.0/configure.h> #include <libmemcached-1.0/platform.h> #include <libmemcached-1.0/limits.h> #include <libmemcached-1.0/defaults.h> #include <libmemcached-1.0/types/behavior.h> #include <libmemcached-1.0/types/callback.h> #include <libmemcached-1.0/types/connection.h> #include <libmemcached-1.0/types/hash.h> #include <libmemcached-1.0/types/return.h> #include <libmemcached-1.0/types/server_distribution.h> #include <libmemcached-1.0/return.h> #include <libmemcached-1.0/types.h> #include <libmemcached-1.0/callbacks.h> #include <libmemcached-1.0/alloc.h> #include <libmemcached-1.0/triggers.h> #include <libhashkit-1.0/hashkit.h> #include <libmemcached-1.0/struct/callback.h> #include <libmemcached-1.0/struct/string.h> #include <libmemcached-1.0/struct/result.h> #include <libmemcached-1.0/struct/allocator.h> #include <libmemcached-1.0/struct/sasl.h> #include <libmemcached-1.0/struct/memcached.h> #include <libmemcached-1.0/struct/server.h> #include <libmemcached-1.0/struct/stat.h> #include <libmemcached-1.0/basic_string.h> #include <libmemcached-1.0/error.h> #include <libmemcached-1.0/stats.h> // Everything above this line must be in the order specified. #include <libmemcached-1.0/allocators.h> #include <libmemcached-1.0/analyze.h> #include <libmemcached-1.0/auto.h> #include <libmemcached-1.0/behavior.h> #include <libmemcached-1.0/callback.h> #include <libmemcached-1.0/delete.h> #include <libmemcached-1.0/dump.h> #include <libmemcached-1.0/encoding_key.h> #include <libmemcached-1.0/exist.h> #include <libmemcached-1.0/fetch.h> #include <libmemcached-1.0/flush.h> #include <libmemcached-1.0/flush_buffers.h> #include <libmemcached-1.0/get.h> #include <libmemcached-1.0/hash.h> #include <libmemcached-1.0/options.h> #include <libmemcached-1.0/parse.h> #include <libmemcached-1.0/quit.h> #include <libmemcached-1.0/result.h> #include <libmemcached-1.0/server.h> #include <libmemcached-1.0/server_list.h> #include <libmemcached-1.0/storage.h> #include <libmemcached-1.0/strerror.h> #include <libmemcached-1.0/touch.h> #include <libmemcached-1.0/verbosity.h> #include <libmemcached-1.0/version.h> #include <libmemcached-1.0/sasl.h> #include <libmemcached-1.0/deprecated_types.h> #ifdef __cplusplus extern "C" { #endif LIBMEMCACHED_API void memcached_servers_reset(memcached_st *ptr); LIBMEMCACHED_API memcached_st *memcached_create(memcached_st *ptr); LIBMEMCACHED_API memcached_st *memcached(const char *string, size_t string_length); LIBMEMCACHED_API void memcached_free(memcached_st *ptr); LIBMEMCACHED_API memcached_return_t memcached_reset(memcached_st *ptr); LIBMEMCACHED_API void memcached_reset_last_disconnected_server(memcached_st *ptr); LIBMEMCACHED_API memcached_st *memcached_clone(memcached_st *clone, const memcached_st *ptr); LIBMEMCACHED_API void *memcached_get_user_data(const memcached_st *ptr); LIBMEMCACHED_API void *memcached_set_user_data(memcached_st *ptr, void *data); LIBMEMCACHED_API memcached_return_t memcached_push(memcached_st *destination, const memcached_st *source); LIBMEMCACHED_API memcached_server_instance_st memcached_server_instance_by_position(const memcached_st *ptr, uint32_t server_key); LIBMEMCACHED_API uint32_t memcached_server_count(const memcached_st *); LIBMEMCACHED_API uint64_t memcached_query_id(const memcached_st *); #ifdef __cplusplus } // extern "C" #endif

View Code

#include "stdio.h"#include <string>#include <iostream>using namespace std;#include <libmemcached/memcached.h>int main(){ memcached_st *memc; memcached_return rc; memcached_server_st *server; time_t expiration = 0; uint32_t flags = 0; memc = memcached_create(NULL); server = memcached_server_list_append(NULL, "127.0.0.1", 11211, &rc); rc = memcached_server_push(memc, server); memcached_server_list_free(server); string key = "key"; string value = "value"; size_t value_length = value.length(); size_t key_length = key.length(); //Save data rc = memcached_set(memc, key.c_str(), key.length(), value.c_str(), value.length(), expiration, flags); cout << rc << endl; if (rc == MEMCACHED_SUCCESS) { cout << "Save data:" << value << " sucessful!" << endl; } //Get data char* result = memcached_get(memc, key.c_str(), key_length, &value_length, &flags, &rc); if (rc == MEMCACHED_SUCCESS) { cout << "Get value:" << result << " sucessful!" << endl; } //Delete data rc = memcached_delete(memc, key.c_str(), key_length, expiration); if (rc == MEMCACHED_SUCCESS) { cout << "Delete key:" << key << " sucessful!" << endl; } //free memcached_free(memc); return 0;}

分布式缓冲之memcache

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120095.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • fastdfs工作原理(科学原理有哪些)

    FastDFS原理介绍1功能简介FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。主页地址:https://github.com/happyfish100/fastdfsFastD…

  • InetAddress

    InetAddressInetAddress类就是封装了IPv4地址和IPv6地址。比较简单,这是muduo库中少有的值语义的类,所以继承的是copyable。实际上copyable只是强调可以拷贝,并没有实际意义。即使不继承该类还是可以copy。InetAddress::InetAddress(uint16_tport,boolloopbackOnly,boolipv6){static_assert(offsetof(InetAddress,addr6_)==0,”addr6_offset0

  • Toast弹窗_androidshowtoast

    Toast弹窗_androidshowtoast安卓toast弹窗toast弹窗是安卓的一个常用控件,它可以便利的获取上下文对象的地方,进行弹窗提示。本文不追究其中原理,只研究方法。toast的几个常用方法有四种。分别是普通弹窗,改变位置的弹窗,图片弹窗,自定义弹窗。1,普通toast弹窗Toast.makeText()是一个有参函数,参数值有三个。第一个参数是当前的上下文控件,getApplicationContext()获取上下文对象或this获取当前对象。第二个参数是你自己要显示的文字。第三个参数是显示的时间长短。有两种形态的值

  • 做10年Windows程序员与做10年Linux程序员的区别

    如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序,同样是工作10年,大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大。我写这篇文章

    2021年12月27日
  • 使用Java中间MessageDigest该文本MD5加密(Java中间MD5样品加密算法演示)

    使用Java中间MessageDigest该文本MD5加密(Java中间MD5样品加密算法演示)

  • 使用activiti总结–bpmn画流程图

    节期结束,赶紧总结一下前几天使用的Activiti工作流的一些方法简单介绍一下Activiti:Activiti一套完整的方便的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。开发人员可以通过插件直接绘画出业务。开发工具:IDEA画流程图插件:actiBPM(在IDEA插件管理中安装就可以了)BPMN…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号