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

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的版本。

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

 

 

 

分享到:
评论

相关推荐

    memcached实现多个tomcat 共享一个session

    标题中的“memcached实现多个tomcat共享一个session”是指在分布式系统中,通过使用memcached作为session存储介质,实现多台Tomcat服务器之间的session共享。这样可以确保用户在集群中的任意一台服务器上登录后,其...

    tomcat中Nginx+memcached实现session共享

    为了实现这一目标,我们可以结合Nginx反向代理服务器和memcached内存缓存系统来达到高效、可靠的Session共享。以下是对这个主题的详细阐述: 首先,让我们理解Session的概念。Session是Web应用程序用来跟踪用户状态...

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

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

    C#使用memCached实现缓存

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

    php实现的memcached队列类

    AB面轮值替换策略是一种常见的队列管理方式,通常通过两个或者多个“面”(即队列段)交替进行读写操作,以防止某个面被过度使用,保证了队列操作的均衡性。 在PHP实现的这个Memcached队列类中,有以下几个主要功能...

    memcached安装包以及MemCachedClient

    libevent 提供了一种方式来处理多个长时间运行的连接,而无需创建大量的线程或进程。 安装 libevent: ```bash sudo apt-get install libevent-dev ``` 重新配置并编译 Memcached,指定使用 libevent: ```bash ...

    Memcached.class.php

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

    memcached 64位 window

    Memcached是一种分布式内存对象缓存系统,广泛用于减轻数据库负载,提高Web应用的性能。由于是64位版本,这意味着它可以利用64位系统的内存优势,处理更大的数据量。 **Memcached简介** Memcached是一款高性能、轻...

    memcached安装软件 libevent magent memcached

    Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载。它通过在内存中存储数据来提供快速的数据访问,从而提高应用的性能。本篇文章将详细讲解如何安装和配置memcached,...

    memcached客户端(三种客户端)

    Memcached 是一种高性能的分布式内存缓存系统,用于减轻数据库负载和提高应用程序的响应速度。在Java开发中,有三种主流的Memcached客户端库供开发者选择:官方的基于传统阻塞IO的客户端、Dustin Sallings实现的基于...

    memcached全面剖析.pdf

    LRU则是一种典型的缓存淘汰算法,用于判断哪些数据应该被从缓存中删除以保证缓存空间的有效利用。 随着技术的发展,memcached也在不断进化。例如,memcached已经向二进制协议过渡,这使得通信协议更加高效,因为二...

    内核态memcached模块

    内核态memcached模块是一种将缓存服务集成到操作系统内核中的实现,旨在提高缓存操作的效率和系统性能。memcached原本是一个用户空间的应用程序,用于提供分布式内存对象缓存服务,它允许应用程序快速存储和检索数据...

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

    注意,虽然Memcached提供了一种快速的session存储解决方案,但也要考虑其局限性,如数据持久化、安全性等问题。在实际应用中,可能需要结合其他技术,如Redis或数据库,以提供更全面的解决方案。

    tomcat8+memcached session共享

    描述中提到的“nginx+tomcat8+memcached session共享所需jar包,直接放到tomcat/lib下即可”,暗示了实现这一功能需要一些特定的Java库(JAR包)。这些JAR包将集成到Tomcat的运行环境中,使Tomcat能够与Memcached...

    JAVA-memcached简单例子

    下面我们将深入探讨如何在Java项目中实现Memcached的简单应用。 1. **Memcached安装与配置** - 首先,你需要在服务器上安装Memcached。这通常通过包管理器(如Ubuntu的`apt-get`或CentOS的`yum`)完成,或者从官方...

    memcached windows稳定版

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

    MemCached 缓存系统配置说明

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

    memcached服务器端memcached.exe 下载

    Memcached是一款高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提高Web应用的性能。它通过在内存中存储数据来快速访问,避免了反复读取硬盘上的数据,从而提高了应用程序的响应速度。 标题“memcached...

    memcached管理session资源

    **正文** Memcached管理Session...总之,使用MSM结合Memcached管理session资源是一种有效的解决方案,能够提升Web应用的性能和可用性。通过合理配置和管理,我们可以构建出一个健壮且高效的分布式session管理系统。

Global site tag (gtag.js) - Google Analytics