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。
分享到:
相关推荐
从O(1)时间复杂度的操作到LRU算法,再到内存分配策略和一致性哈希算法,每一个方面都旨在最大限度地提高缓存效率,使Memcache成为一种广泛应用于高流量Web应用程序的理想选择。对于希望利用缓存技术优化应用性能的...
这段代码首先连接到Memcache服务器,然后遍历缓存中的所有数据项,提取出需要处理的键。接着,它将这些键对应的缓存数据反序列化,并存入一个数组,以便后续批量写入MySQL。在满足一定数量(例如50条)或遍历完所有...
- 在无法使用数据库时,Memcache可用于统计在线访问用户数,通过遍历session文件个数或使用共享缓存(memcached)来实现。 5. 分布式存储和高可用 - 大型网站在使用Memcache时,为了提高缓存的可用性和扩展性,...
首先,要使用Memcache,需要确保已经安装了memcache扩展,并且Memcache服务已在服务器上运行。在PHP代码中,通过new Memcache()创建Memcache类的实例。之后,使用connect()方法连接到Memcache服务器。 连接Memcache...
标题中的“php+memcache实现的网站在线人数统计代码”是指使用PHP编程语言与Memcache缓存...同时,由于Memcache的数据不持久化,一旦服务重启,所有在线用户数据将丢失,因此在实际应用中需要考虑数据备份或恢复策略。
1. **数据获取**:使用 C# 客户端库(如 EnyimMemcached)连接到 Memcached 服务,遍历所有键并获取对应的值。 2. **数据转换**:根据需要将 Memcached 中的键值对转换为 Redis 兼容的数据格式。 3. **连接 Redis**...
标题中的“memcache支持分布式”意味着Memcached可以通过多种方式实现跨多个节点的数据存储和检索,以扩展其处理能力并提高可用性。这种分布式架构的关键在于将数据分散到不同的服务器上,确保即使单个服务器出现...
5. 为了保证数据一致性,可以设置过期时间或使用缓存失效策略。 总结来说,获取XML叶子节点是数据处理的基本操作,通过DOM或SAX解析器可以轻松实现。同时,结合Memcached这样的缓存系统,可以有效提升数据处理的...
这种策略称为客户端的分布式,也被称为“惰性失效机制”,因为过期的键值对不会立即从内存中删除,只有在用户尝试获取时才会检查并可能返回空值。 2. **memcache的惰性失效机制** 当缓存项过期时,它不会自动从...
4. **jQuery**:这是一个高效、简洁、易用的JavaScript库,简化了HTML文档遍历、事件处理、动画和Ajax交互。掌握jQuery能让你更高效地编写前端代码,同时了解DOM操作、事件处理和动画效果的实现。 5. **Linux**:...
3. Nginx配置和负载均衡策略,如何根据权重进行请求转发。 4. 在实现类似Redis这样的键值存储时,使用HashMap可能遇到的问题,以及ConcurrentHashMap的使用。 5. 线程的状态、阻塞方式、sleep与wait方法的区别。 6. ...
3. 编写遍历目录的函数,涉及递归和文件系统的操作。 4. 编写匹配邮箱和URL的正则表达式,测试正则处理能力。 5. MySQL存储引擎、开源数据库名称,以及MySQL不同版本的区别,考察数据库知识。 6. MySQL中varchar与...
通过导入memcache模块,并创建一个memcache.Client实例,就可以轻松地在Python中使用memcached的功能了。最常用的两个函数是set和get。set函数用于存储数据到缓存,get函数用于从缓存中获取数据。 6. 配置和运行...
示例代码如下: ...$a = "linux"; ... $array = array($a, $b);...在这个例子中,我们创建了一个包含$a和$b的数组,然后通过...两者都是遍历查询结果,但在处理数据库结果时,mysql_fetch_assoc更方便直接使用字段名进行操作。
- 迭代法:设置三个指针(前指针、当前指针和后指针),依次遍历节点并调整指针指向。 - 递归法:递归地将链表的每个节点链接到已反转的部分。 - **双向链表的操作**: - 双向链表中的每个节点都有指向前后节点...
TP5支持多种缓存驱动,包括File、Redis、Memcache、Sqlite等,这些驱动可以方便地存储和读取缓存数据。默认情况下,TP5使用File缓存,即保存缓存文件到本地文件系统。 清除缓存功能主要涉及两个部分:服务器端的...
- **高效的缓存机制**:支持多种缓存策略,如文件缓存、Memcache缓存、Redis缓存等,有效提升系统性能。 - **强大的模型层**:提供丰富的数据操作接口,如数据验证、数据自动完成、事务处理等,简化数据库操作。 ##...