`
元博之
  • 浏览: 51820 次
社区版块
存档分类
最新评论

memcached的伪命名空间的一种实现方式

阅读更多

问题:

1.memcached的规则并不建议,甚至反对开发人员主动的删除数据 .{不考虑flush_all...}

       但是就是存在一些场景,需要手动的删除一组数据,而这么一组数据拥有一定的规则{即命名空间}

2.memcached 当中并没有明确的命名空间的概念及实现{恩,这一点值得肯定},问题就是这样,怎么删除这组数据呢.

 

方式:

  google上流传出来的一种伪命名空间的方式,即可以不违反"不主动删除数据"的规则,还能够使原来的那一组数据失效,等价于删除.

 

方式解读:

  memcache存取数据都是通过key来完成的。按照一定的方式拼装 key,即可模拟命名空间。

      一种key的拼装规则:

            key = namespace_name + namespace_key + value_key ;

 

      namespace_name:命名空间的 String

  namespace_key:命名空间的Key,我觉得叫做 namespace_version更好。每次想删除一组数据时提升版本。

      value_key:待缓存数据的 Key,命名空间内数据的 id;


程序如下:{快速阅读,下边有程序的解读}

 

$ns_key = $memcache->get("foo_namespace_key");

 

// if not set, initialize it

if($ns_key===false)

        $memcache->set("foo_namespace_key", rand(1, 10000));

 

// cleverly use the ns_key

$my_key = "foo_".$ns_key."_12345";

$my_val = $memcache->get($my_key);

 

//To clear the namespace do:
$memcache->increment("foo_namespace_key");

 

程序解读:

// 设定的命名空间名称为 foo
$ns_key = $memcache->get("foo_namespace_key"); //得到现在的 namespace 的 版本号。


// if not set, initialize it {没有的话,生成一个版本号}
if($ns_key===false) $memcache->set("foo_namespace_key", rand(1, 10000));


// cleverly use the ns_key {利用这个namespace_key}
$my_key = "foo_".$ns_key."_12345";//{12345为 value_key , 看看这个 my_key是怎么拼装的。}

//foo为 namespace ,ns_key 为 取出的 namespace_key,123456 为 value_key


$my_val = $memcache->get($my_key); //根据生成的 key 取数据

//To clear the namespace do: {想要删除 命名空间 为 foo 的数据时,这样做:}
$memcache->increment("foo_namespace_key");//修改namespace_key的值。即提升namespace的版本。

//原来缓存的数据会因为超时,被重复利用。并没有违背主动删除数据。

 

 

 

分享到:
评论

相关推荐

    C#使用memCached实现缓存

    C#使用memCached实现缓存 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。...

    memcached C++客户端的最简单实现

    老大想用memcached,但是不喜欢网上的那些库。于是我写了这份测试代码。这里面对socket各种不正常状态基本没有做处理,不适合直接使用。但是它绝对足够简单方便,很适合打算用memcached但又不喜欢用那些庞大复杂的...

    Memcached.class.php

    本文件是一个memcache操作类,附带命名空间,请使用php5.4或以上版本运行。

    memcached安装包以及MemCachedClient

    memcached, libevent, MemCachedClient

    tomcat中Nginx+memcached实现session共享

    tomcat中Nginx+memcached实现session共享 所需要的jar包

    memcached windows稳定版

    NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。 4.下载php_memcache.dll,请自己查找对应的php版本的文件 5. 在C:\winnt\php.ini 加入一行 ‘extension=...

    MemCached 缓存系统配置说明

    这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键做分区存储,而这个区就是Memcached服务端的一个或者多个...

    memcached实现集群的session共享问题

    memcached实现集群的session共享问题,处理集群服务器情况下,memcached的session共享解决方案

    memcached_java实现分布算法

    对于 Memcached 来说,本身是集中式的缓存系统,要搞多节点分布,只能通过客户端实现。Memcached 的分布算法一般有两种选择:

    memcached 64位 window

    memcached 64位 window memcached 64位 window memcached 64位 window

    memcached客户端(三种客户端)

    Memcached的java客户端已经存在三种了:官方提供的基于传统阻塞io由Greg Whalin维护的客户端;Dustin Sallings实现的基于java nio的Spymemcached;XMemcached

    memcached安装软件 libevent magent memcached

    memcached安装软件 libevent-2.0.21-stable.tar.gz magent.tar.gz memcached-1.4.15.tar.gz

    安装Memcached及Memcached配置

    安装Memcached及Memcached配置

    JAVA-memcached简单例子

    JAVA-memcached简单例子。

    memcached-library, 一个与Memcached缓存系统接口的CodeIgniter库.zip

    memcached-library, 一个与Memcached缓存系统接口的CodeIgniter库 用于CodeIgniter的#Memcached 库##Description这个库是为了帮助一个基于CodeIgniter的项目与 1或者更多的Memcached服务器( ...

    php实现的memcached队列类

    一个php实现的memcached队列类,支持多进程并发写入、读取;边写边读,AB面轮值替换,获取队列首尾值 ,获取当前轮值的队列面 ,添加数据 ,获取队列某段长度的key数组 。

    nginx+tomcat+memcached

    tomcat memcached nginx 实现session共享,实现登录登录

    memcached for win32

    MemCached For Win32 服务器 -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -...

    memcached 服务端以及memcached.jar

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载,很好的提高了Web性能。Memcached需要有缓存服务端,采用java编程的话还需要memcached.jar,这就是java中实现memcached服务的...

    j2ee项目使用filter和memcached实现session服务器

    j2ee项目使用filter和memcached实现session服务器

Global site tag (gtag.js) - Google Analytics