分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

今天在和同事查找菜单数据清CACHE时为什么出问题,其中有谈到MEMCACHED在集群环境下是否会保持数据的一致性,我的印象中好像memcached是有通过版本控制来实现的,不过只是有点模糊的印象,为了查了究竟也为了解决这个问题,我查了一下资料,不过顺便在这里也把菜单系统的CACHE实现在这里YY几句,知道的就当我废话了。
菜单系统有以下几个特点:
1、从其本身上来说,是属于不经常性变化的数据,读取的频率远大于写的频率;
2、从数据量上来看,也不大,也就是数据几K到十K左右的数据;
3、访问量比较大,每天都会有上百万的访问;
4、每个用户都会有菜单数据;
5、菜单系统是属于多个系统共用。
从以上的数据变化性比较小、数据量比较小、访问量比较频繁以、高命中率、属于分布式应用,我们是将菜单数据放到了Memcached中,当然,通常使用Memcached也最好符合这几个条件,否则会起不到相应的效果。
菜单系统本身有权限限制,用户与用户之间看到的菜单是不同的,不过这个权限没有定义到人头的千人千面,是通过用户分组来实现的,用户组的菜单CACHE键是通过当前用户组所具有的权限组合出来的,因为每个用户组可以查看的菜单是确定的,目前的方式是将每个用户组的菜单分别存放到MemCached中,也避免了频繁的读取数据库以及再次验权的问题。不过这个时候产生了一个新的问题,需要将CACHE中用户组的菜单给删除,这样才能够立即展示后台菜单管理系统对菜单操作的变化效果,但是用户组的CACHE键的数量及名称是根据用户拥用的权限组合起来的,也就是CACHE KEYS的值以及数量是不确定的,并且MEMCACHED本身不支持对键的遍历,也就是我们要清除一个菜单CACHE项,首先要知道这个CACHE项的键,菜单后台管理系统是一套单独的系统,为了清理CACHE中所有的菜单数据,后台系统必须要拿到所有用户组的CACHE KEYS,因而就需要有有一个地方存放这些键,现在采取的方式,将所有存放用户组权限菜单的CACHE KEYS,单独存放到一个CACHE项中,在后台菜单和管理系统中清理菜单之前,先获取这个存放所有用户组权限菜单的CACHE KEYS,再根据这个CACHE项中存放的所有CACHE KEYS,循环删除所有的用户组权限菜单CACHE项。
这里插一句memcached的命令执行方式,所有的被发送到memcached的单个命令是完全原子的。如针对同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方。它们将被串行化、先后执行。即使在多线程模式,所有的命令都是原子的,除非程序有bug:)。但是命令序列不是原子的。如果通过get命令获取了一个item,修改了它,然后想把它set回memcached,我们不保证这个item没有被其他进程 (process,未必是操作系统中的进程)操作过。在并发的情况下,也可能覆写了一个被其他进程set的item。
也就是说大家都是操作的同一份存放在MEMCACHED中的CACHE KEYS,在并发的情况也会出现问题的,如原来MEMCACHED中的KES的内容为A,客户端C1和客户端C2都把A取了出来,C1往准备往其中加B,C2准备往其中加C,这就会造成C1和C2执行后的CACHE KEYS要么是AB要么是AC,而不会出现我们期望的ABC。这种情况,如果不是在集群环境中,而只是单机服务器,可以通过在写CACHE KEYS时增加同步锁,就可以解决问题,可是在集群环境中,同步锁是显然解决不了问题的。
不过,也不要悲观,出现问题时,总会有解决办法的出现,memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果使用gets命令查询某个key的item,memcached会返回该item当前值的唯一标识。如果覆写了这个item并想把它写回到memcached中,可以通过cas命令把那个唯一标识一起发送给 memcached。如果该item存放在memcached中的唯一标识与提供的一致,写操作将会成功。如果另一个进程在这期间也修改了这个 item,那么该item存放在memcached中的唯一标识将会改变,写操作就会失败。

本文出自:冯立彬的博客

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

MEMCACHED在集群环境下对并发更新是否保持数据一致相关推荐

  1. weblogic 12C集群环境下的session复制

    做过weblogic集群环境的人应该都清楚,要想实现session同步,必须满足两个条件:第一,在weblogic.xml里面增加session同步相关的代码:第二,所有放入session的类都要序列 ...

  2. 服务器集群环境下session的共享问题

    一,集群和分布式的区别 在进入今天的正题之前,对服务器集群和分布式服务器这两个概念进行简要说明. 服务器集群:服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器. ...

  3. quartz在集群环境下的最终解决方案

    在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 quartz 协调处理自动化 JOB . 大家想象一下,现在有 A , B , C3 台机器同时作为集群服务器对外统一提供 SERVI ...

  4. 分布式集群环境下,如何实现session共享三(环境搭建)

    这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...

  5. Java技术分享:集群环境下的定时任务

    定时任务的实现方式有多种,例如JDK自带的Timer+TimerTask方式,Spring 3.0以后的调度任务(Scheduled Task),Quartz框架等. Timer+TimerTask是 ...

  6. 在非容器(集群)环境下运行dapr

    作者:李俱顺 原文:https://www.4async.com/2021/03/2021-03-11-running-dapr-without-container/ 前一段时间一直关注的dapr正式 ...

  7. 集群环境下,你不得不注意的ASP.NET Core Data Protection 机制

    引言 最近线上环境遇到一个问题,就是ASP.NET Core Web应用在单个容器使用正常,扩展多个容器无法访问的问题.查看容器日志,发现以下异常: System.Security.Cryptogra ...

  8. Hadoop集群环境下网络架构的设计与优化

    2019独角兽企业重金招聘Python工程师标准>>> 大数据时代,研究大数据的IT 厂商把研究重心放在优化大数据系统软件架构.优化业务逻辑.优化数据分析算法.优化节点性能等方向,而 ...

  9. ORACLE集群日志收集,【RAC】Oracle RAC集群环境下日志文件结构

    在Oracle RAC环境中,对集群中的日志的定期检查是必不可少的.通过查看集群日志,可以早期定位集群环境中出现的问题,以便将问题消灭在萌芽状态.简单介绍一下有关Oracle集群环境中日志的结构,方便 ...

最新文章

  1. 能用文件的安卓c语言,使用android NDK将.C 文件编译为 手机 可执行程序或者.so
  2. Python从零开始系列连载(11)——Python的基本运算和表达式(中二)
  3. 除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等
  4. 【Java】浅谈Java的GUI开发
  5. ApacheCN 捐赠名单 2019
  6. linux atoi,atoi()的替代办法
  7. 联想教育应用使用说明(7.6版本)——第5章 常见的问题与解答
  8. 软件设计师考试大纲(2004版)
  9. oracle卸载客户端,oracle11g客户端如何完全卸载
  10. Mybatis 缓存
  11. python爬取电影票房网并保存csv
  12. wpa/wpa2无线网pin码破解
  13. 搜索引擎提交软件_SEO程序员一个会关键词优化的半个程序玩家搜索引擎优化
  14. MODLE CODE
  15. 001-eNSP 先学画个漂亮的拓扑图
  16. MailRaider Pro for Mac(Outlook邮件格式转换工具) v3.5.0永久激活
  17. 美国Linux服务器系统内核的详细介绍
  18. c语言运行后电脑很卡,如何让电脑提速,电脑卡是什么原因?
  19. dpdk内存池 mpool 实现机制
  20. 蓝牙芯片|伦茨科技智能可穿戴设备芯片ST17H65

热门文章

  1. 教你如何使用FusionInsight SqoopShell
  2. 【新春特辑】发压岁钱、看贺岁片、AI写春联……华为云社区给大家拜年了
  3. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
  4. LB服务:硬件如何被软件取代(上)
  5. opengl学习笔记 (一)
  6. Spark内核解析2
  7. 红橙Darren视频笔记 筛选View 属性动画 Adapter模式 组合动画AnimatorSet 观察者模式(对比Android ListView) 练习
  8. ParaView绘制gprMax正演模拟的波场快照方法(1)
  9. 1650显卡能带动144hz吗_GTX1660显卡能称得起最甜吗?最猛GTX1660显卡性能测评
  10. c++ 设置类型别名