`
xieye
  • 浏览: 837925 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

memcache遍历策略

 
阅读更多

mysql的内存引擎其实很好用,但是我担心并发大还是不行。


用memcache,不好遍历。我想了一个办法。


键分三种,

第1种,只有一个就是news_index_index,值的模样是逗号分隔的字符串或数组。

第2种,news_index_XXX,XXX是数字,长度不限,如果xxx=1200,则news_index_1200只能存120000-120099的新闻id,值的模样同上。

第3 种,news_XXX,XXX长度不限,就是新闻id,值就是点击量,int型


分3步,存,取,遍历(倍数为100)。



假设有一个item,key为news_index_index,值为如同1,2,4,44,这样的数据。


当一篇新闻的id例如12004,则除以100取整,得到120,


查询key=news_index_index
if (没有120) {
  在key=news_index_index的item 的值中添加120;
  添加news_index_120的item ,值为空。

}

查询key=news_index_120,查有无12004

 if (有12004) {

   key为news_12004   的item 的值加1;

}else {

  key=news_index_120,的item的值加上一个12004;

  添加一个item,key=news_12004,value=1

}







如果要id为333367的点击量,

则直接取key为 news_333367的item的值即可



遍历

当我要遍历所有在 memcache中的新闻id时,则有了上述机制后,太简单了,就不说了。

 

备注

另外,为防止数据过多,可以在半夜把点击量保存到数据库中,然后清除第2、3种键,并把第一个键的值清空。

 

2、为防止查询某键得到结果0,此时不知道是item存在值为0,还是item不存在,应避免使用值为0的item。

 

 

 

分享到:
评论

相关推荐

    memcache internals

    从O(1)时间复杂度的操作到LRU算法,再到内存分配策略和一致性哈希算法,每一个方面都旨在最大限度地提高缓存效率,使Memcache成为一种广泛应用于高流量Web应用程序的理想选择。对于希望利用缓存技术优化应用性能的...

    php从memcache读取数据再批量写入mysql的方法

    这段代码首先连接到Memcache服务器,然后遍历缓存中的所有数据项,提取出需要处理的键。接着,它将这些键对应的缓存数据反序列化,并存入一个数组,以便后续批量写入MySQL。在满足一定数量(例如50条)或遍历完所有...

    php之Memcache学习笔记

    - 在无法使用数据库时,Memcache可用于统计在线访问用户数,通过遍历session文件个数或使用共享缓存(memcached)来实现。 5. 分布式存储和高可用 - 大型网站在使用Memcache时,为了提高缓存的可用性和扩展性,...

    php中memcache 基本操作实例

    首先,要使用Memcache,需要确保已经安装了memcache扩展,并且Memcache服务已在服务器上运行。在PHP代码中,通过new Memcache()创建Memcache类的实例。之后,使用connect()方法连接到Memcache服务器。 连接Memcache...

    php+memcache实现的网站在线人数统计代码

    标题中的“php+memcache实现的网站在线人数统计代码”是指使用PHP编程语言与Memcache缓存...同时,由于Memcache的数据不持久化,一旦服务重启,所有在线用户数据将丢失,因此在实际应用中需要考虑数据备份或恢复策略。

    memcached数据完整迁移到redis

    1. **数据获取**:使用 C# 客户端库(如 EnyimMemcached)连接到 Memcached 服务,遍历所有键并获取对应的值。 2. **数据转换**:根据需要将 Memcached 中的键值对转换为 Redis 兼容的数据格式。 3. **连接 Redis**...

    memcahe支持分布式

    标题中的“memcache支持分布式”意味着Memcached可以通过多种方式实现跨多个节点的数据存储和检索,以扩展其处理能力并提高可用性。这种分布式架构的关键在于将数据分散到不同的服务器上,确保即使单个服务器出现...

    获取xml叶子节点

    5. 为了保证数据一致性,可以设置过期时间或使用缓存失效策略。 总结来说,获取XML叶子节点是数据处理的基本操作,通过DOM或SAX解析器可以轻松实现。同时,结合Memcached这样的缓存系统,可以有效提升数据处理的...

    java大厂面试题.docx

    这种策略称为客户端的分布式,也被称为“惰性失效机制”,因为过期的键值对不会立即从内存中删除,只有在用户尝试获取时才会检查并可能返回空值。 2. **memcache的惰性失效机制** 当缓存项过期时,它不会自动从...

    韩老师php高级 课件源码

    4. **jQuery**:这是一个高效、简洁、易用的JavaScript库,简化了HTML文档遍历、事件处理、动画和Ajax交互。掌握jQuery能让你更高效地编写前端代码,同时了解DOM操作、事件处理和动画效果的实现。 5. **Linux**:...

    一线互联网企业面试题.pdf

    3. Nginx配置和负载均衡策略,如何根据权重进行请求转发。 4. 在实现类似Redis这样的键值存储时,使用HashMap可能遇到的问题,以及ConcurrentHashMap的使用。 5. 线程的状态、阻塞方式、sleep与wait方法的区别。 6. ...

    初级PHP程序员笔试题给某搜索引擎公司出的.pdf

    3. 编写遍历目录的函数,涉及递归和文件系统的操作。 4. 编写匹配邮箱和URL的正则表达式,测试正则处理能力。 5. MySQL存储引擎、开源数据库名称,以及MySQL不同版本的区别,考察数据库知识。 6. MySQL中varchar与...

    Python中用memcached来减少数据库查询次数的教程

    通过导入memcache模块,并创建一个memcache.Client实例,就可以轻松地在Python中使用memcached的功能了。最常用的两个函数是set和get。set函数用于存储数据到缓存,get函数用于从缓存中获取数据。 6. 配置和运行...

    第9套PHP面试题1

    示例代码如下: ...$a = "linux"; ... $array = array($a, $b);...在这个例子中,我们创建了一个包含$a和$b的数组,然后通过...两者都是遍历查询结果,但在处理数据库结果时,mysql_fetch_assoc更方便直接使用字段名进行操作。

    java高级工程师面试总结

    - 迭代法:设置三个指针(前指针、当前指针和后指针),依次遍历节点并调整指针指向。 - 递归法:递归地将链表的每个节点链接到已反转的部分。 - **双向链表的操作**: - 双向链表中的每个节点都有指向前后节点...

    TP5(thinkPHP框架)实现后台清除缓存功能示例

    TP5支持多种缓存驱动,包括File、Redis、Memcache、Sqlite等,这些驱动可以方便地存储和读取缓存数据。默认情况下,TP5使用File缓存,即保存缓存文件到本地文件系统。 清除缓存功能主要涉及两个部分:服务器端的...

    ThinkPHP3.0 RC2完全开发手册pdf版

    - **高效的缓存机制**:支持多种缓存策略,如文件缓存、Memcache缓存、Redis缓存等,有效提升系统性能。 - **强大的模型层**:提供丰富的数据操作接口,如数据验证、数据自动完成、事务处理等,简化数据库操作。 ##...

Global site tag (gtag.js) - Google Analytics