任务六:memcache的使用

大家好,我是IT修真院深圳分院java第4期学员,一枚正直善良的java程序员。今天给大家分享一下,修真院官网java任务六中关于memcache的知识,以及memcache的使用。

1.背景介绍

Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。

本质上,它是一个简洁的key-value存储系统。

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

2.知识剖析

为什么会有Memcache和memcached两种名称?

其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名。

memcached运行:

启动选项:

d是启动一个守护进程

m是分配给Memcache使用的内存数量,单位是MB

u是运行Memcache的用户

l是监听的服务器IP地址,可以有多个地址

p是设置Memcache监听的端口,,最好是1024以上的端口

c是最大运行的并发连接数,默认是1024

P是设置保存Memcache的pid文件

java客户端的实现:XMemcached

XMemcached是一个新java memcached client。

XMemcached是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和

资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一

个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。

XMemcached的使用:

1)导入xmemcached依赖

2)创建MemcachedClientBuilder,然后builder一个MemcachedClient

Memcached 存储命令:

Memcached set 命令:用于将 value(数据值) 存储在指定的 key(键) 中。

如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

Memcached add 命令:Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。

如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同。

Memcached replace 命令:用于替换已存在的 key(键) 的 value(数据值)。

如果 key 不存在,则替换失败

Memcached append 命令:用于向已存在 key(键) 的 value(数据值) 后面追加数据 。

Memcached prepend 命令:用于向已存在 key(键) 的 value(数据值) 前面追加数据 。

Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作

它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。

检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。

Memcached 查找命令:

Memcached get 命令:获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。

Memcached gets 命令:获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空。

Memcached delete 命令:用于删除已存在的 key(键)。

Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。

incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。

Memcached 统计命令:

Memcached stats 命令:用于返回统计信息例如 PID(进程号)、版本号、连接数等。

Memcached stats items 命令:用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。

Memcached stats slabs 命令:用于显示各个slab的信息,包括chunk的大小、数目、使用情况等。

Memcached stats sizes 命令用于显示所有item的大小和个数。

该信息返回两列,第一列是 item 的大小,第二列是 item 的个数。

Memcached flushAll 命令:用于用于清理缓存中的所有 key=>value(键=>值) 对。

3.常见问题

Memcached本身并没有提供迭代所有key的方法,如何查看memcache中所有的key?

4.解决方案

想迭代所有的key,你只需要获取一个KeyIterator,然后遍历KeyIterator即可。

5.编码实战

。。。

6.扩展思考

为什么使用cas协议?

当我们的应用是分布式的,无状态的应用服务器通过负载均衡,部署到了多台。

如果不采用CAS,则有如下的情景:

第一步,A取出数据对象X;

第二步,B取出数据对象X;

第三步,B修改数据对象X,并将其放入缓存;

第四步,A修改数据对象X,并将其放入缓存。

第四步和第三步的存储数据就产生了冲突。所以需要cas操作命令:

cas操作必须先要通过,gets名利获得cas令牌,然后把令牌带入cas命令才可以修改数据。

7.参考文献

参考一:Xmemcached 中文用户指南

参考二:memcached 菜鸟教程

8.更多讨论

1)不同服务器间的不同memecache的数据可以共享吗?

没有共享的必要。

2)memcache分布式算法有几种?

我所知道的有:余数哈希,一致性哈希,但是现在基本都用一致性哈希。

3)电脑关机,memcache数据还存在吗?

这要看你的memcache是安装在什么地方,要是装在本机,那么关机之后数据就没有了,我是装在服务器,我的服务器一直开机,所以,我的电脑关机对我的memecache数据没有影响。

4)memcache节点是什么?

考量 Hash 算法的另一个指标是平衡性 (Balance) ,定义如下:

平衡性:平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。

hash算法并不是保证绝对的平衡,如果 cache 较少的话,对象并不能被均匀的映射到 cache 上,比如在上面的例子中,仅部署 cache A 和 cache C 的情况下,在4个对象中, cache A 仅存储了 object1 ,而 cache C 则存储了 object2 、 object3 和 object4 ;分布是很不均衡的。

为了解决这种情况, consistent hashing 引入了“虚拟节点”的概念,它可以如下定义:

“虚拟节点”( virtual node )是实际节点在 hash 空间的复制品( replica ),一实际个节点对应了若干个“虚拟节点”,这个对应个数也成为“复制个数”,“虚拟节点”在 hash 空间中以 hash 值排列。

5)memcache存储的方式:

它是key-value形式存储的。

PPT链接:戳这里

腾讯视频:戳这里

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树。IT修真学院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容