- 浏览: 2663938 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
在网站中很多场景都有计数的需求,比如找回密码要求一天只能找回10次。如果并发量比较高会导致数据库频繁的更新和查询,可以使用memcached来实现计数器,代码很简单:
使用2个memcache,一个用于存储增加的计数器,另一个用于上锁。锁有时间限制,如果未到期,那么就更新memcache里的计数器;如果到期,就创建一个新锁,并把memcache里的值增加到数据库里,并删除现有的memcache里的计数器。
实现代码如下:
注意那个memcache.add函数,如果未到期,那么加锁失败,直接增加memcache的值;如果到期,那么加锁成功,更新memcache到datastore。
这种方法可能存在这些缺陷:
如果计数频率太低,会导致memcache几乎没用,每次都得更新数据库。这比直接访问数据库多用了3次memcache操作。
如果memcache里的计数器过期,那就会丢失更新间隔内的计数值。但一般是计算频率过低导致的,而频率越低,丢失的计数值就越小。
需要真正的计数值时,需要同时访问datastore和memcache。
在更新数据库和删除memcache里的计数器时存在不同步,可能丢失计数值。解决办法是把delete函数改成decr函数,剪掉之前获取的计数值即可。不过这样就会长期占用memcache了。
实际上如果memcache能提供一个失效事件,每次失效时自动更新到数据库,将会是个很不错的特性。
使用2个memcache,一个用于存储增加的计数器,另一个用于上锁。锁有时间限制,如果未到期,那么就更新memcache里的计数器;如果到期,就创建一个新锁,并把memcache里的值增加到数据库里,并删除现有的memcache里的计数器。
实现代码如下:
def incrementCounter(key, update_interval=10): """Increments a memcached counter. Args: key: 数据库里计数器实体的key. update_interval: 更新频率. """ lock_key = "counter_lock:%s" % key count_key = "counter_value:%s" % key if memcache.add(lock_key, None, time=update_interval): count = int(memcache.get(count_key) or 0) + 1 def tx(): entity = db.get(key) entity.counter += count entity.put() db.run_in_transaction(tx) memcache.delete(count_key) else: memcache.incr(count_key, initial_value=0)
注意那个memcache.add函数,如果未到期,那么加锁失败,直接增加memcache的值;如果到期,那么加锁成功,更新memcache到datastore。
这种方法可能存在这些缺陷:
如果计数频率太低,会导致memcache几乎没用,每次都得更新数据库。这比直接访问数据库多用了3次memcache操作。
如果memcache里的计数器过期,那就会丢失更新间隔内的计数值。但一般是计算频率过低导致的,而频率越低,丢失的计数值就越小。
需要真正的计数值时,需要同时访问datastore和memcache。
在更新数据库和删除memcache里的计数器时存在不同步,可能丢失计数值。解决办法是把delete函数改成decr函数,剪掉之前获取的计数值即可。不过这样就会长期占用memcache了。
实际上如果memcache能提供一个失效事件,每次失效时自动更新到数据库,将会是个很不错的特性。
发表评论
-
Sofa memcached client
2012-12-13 17:05 1046一、简介 Sofa 源于 Mi ... -
xmemcached 源代码简单记录
2012-12-13 15:14 960XMemcachedClient.set() 1. ... -
python-memcached client 性能分析
2012-11-11 12:41 920前面python-memcached client 性能问题 ... -
python-memcached client 性能问题
2012-11-09 12:02 1551线上发现memcached偶发超过100ms的情况,刚开始以为 ... -
线程安全的纯python-memcached客户端
2012-10-21 15:06 2057前面测试过python-memcached客户端通过threa ... -
集中化管理memcached的想法
2012-10-21 14:14 1032现在线上web服务器都是直接使用memcached,虽然简单但 ... -
安装libmemcached
2012-10-12 23:32 1825libmemcached是一个c编写的高性能,线程安全的mem ... -
python-memcached的线程安全问题
2012-10-12 15:40 4038答案是肯定的,前提你在使用Python 2.4+和python ... -
使用libmemcached提速memcached的操作
2012-10-12 13:32 1137... -
对memcaced的python客户端测试
2012-10-12 11:34 1277在线上发现python-memcached客户端很有问题,我在 ... -
memcached客户端比较
2012-07-21 16:36 0一、简介 Sofa 源于 Mi ... -
memcache mutex设计模式
2012-07-21 14:19 0Mutex主要用于有大量并发访问并存在cache过期的场合,如 ... -
淘宝在Memcached使用记录
2012-07-21 14:04 5455原文:http://blog.csdn.net/cenwenc ... -
memcache的API
2012-07-21 13:55 720php版本的API:http://www.php.net/ma ... -
memcached协议
2012-07-21 13:36 779协议 memcached的客户端通过 ... -
一致性 hash 算法( consistent hashing )
2012-07-21 12:42 880原文:http://num7.iteye.com/blog/7 ... -
memcached的一些总结
2012-07-13 17:38 1290我们之前对排行榜的数据进行缓存,由于排行榜在我们所有sql s ... -
memcached 内存分配(slab和chunk)
2012-07-13 16:43 7288开启memcached:memcached -d -m 10 ... -
memcached telnet
2012-07-13 16:06 1082memcached没有client工具来查看状态,只提供tel ... -
memcache中的key为什么要用md5处理
2012-06-15 17:55 1371官方的说法是: “A few years ago, we ...
相关推荐
2. **分桶计数**:在高并发场景下,为了避免单个计数器的性能瓶颈,可以使用多个计数器(分桶),每个桶负责一部分流量,定期进行汇总。 3. **持久化**:虽然Memcached数据存储在内存中,但可以通过定期将计数器数据...
Memcache是一个广泛使用的开源高性能分布式内存对象缓存系统,它能够通过在内存中存储数据来减少对数据库的访问,从而提高Web应用的性能。 描述中的"windows下memcache安装包 附带php扩展包"揭示了这个压缩包不仅...
2. 基于libevent的事件处理:Memcached使用libevent库来处理网络事件,使得其在高并发环境下有良好的性能表现。 3. 内置内存存储方式:Memcached不依赖磁盘存储,数据直接存储在服务器的内存中,读写速度非常快。 ...
它通过将数据存储在内存中,实现快速读取,适用于处理大量数据的高并发场景。 2. **工作原理**:MemCache基于键值对(key-value)存储,将数据以键的形式映射到内存中的值。当应用程序需要数据时,首先查询MemCache...
- **计数器:** 对于博客的阅读次数、评论数量等,使用`increment()`或`decrement()`进行原子操作,避免并发问题。 4. **优化与注意事项** - **过期策略:** 数据过期后,Memcache不会自动清理,而是等待下次访问时...
本课程主要针对的是Java开发人员,旨在通过实例教学来探讨如何构建高并发、大数据量的网站平台。课程由经验丰富的讲师Tom5授课,涵盖了多种关键技术和实战案例,以帮助学员快速掌握千万级高并发大数据网站的搭建。 ...
在高并发场景下,为了避免竞态条件,通常会采用“写穿透”或者“写绕过”策略,确保数据的一致性。nexus-memcache库的使用可以灵活地调整这些策略,以适应不同的业务需求。 此外,为了提高缓存的可用性,nexus-...
第二个示例展示了如何使用memcache进行计数器操作,通过获取、递增并设置'pid'键的值,实现了一个简单的计数器。 **四、memcache的优势** 1. **高速度**:由于数据存储在内存中,访问速度极快。 2. **分布式**:...
- **计数器服务**:在高并发环境下,用于统计访问量、点赞数等。 3. **技术特性** - **高可用性**:通过集群化部署,确保服务的稳定性和数据的可靠性。 - **弹性扩展**:根据业务需求,无缝调整内存容量,支持...
随着云计算技术的飞速发展,云数据库作为企业信息化建设的核心组件,在满足高并发、大数据量的业务场景中扮演着越来越重要的角色。阿里云专有云Enterprise版云数据库Memcache版,作为高效、轻量级的分布式缓存服务,...
总的来说,Memcache.dll 5.3.5是PHP开发者提升网站性能的重要工具,尤其在高并发、大数据量的场景下,它的引入可以显著降低数据库的压力,提升用户体验。正确安装和配置这个扩展,对于任何依赖数据库的PHP应用来说都...
其工作原理是将数据存储在内存中,提供快速的数据访问速度,尤其是在高并发场景下,能够显著提升系统的响应能力。 ### PHP Memcached 高级缓存应用代码解析 #### Memcached类方法详解 在PHP中,`Memcache`类提供...
在开发高并发的Web应用程序时,数据库的存取效率是性能的关键因素。当访问量过大,数据库成为瓶颈时,可能导致系统崩溃。为了解决这个问题,可以采用缓存技术,比如memcache。memcache是一个高性能的分布式内存对象...
5. **Memcache::decrement()**: 减少指定键的数值,通常用于计数器。 6. **Memcache::delete()**: 删除缓存中指定的键,从而移除对应的数据。 7. **Memcache::flush()**: 清空整个缓存,删除所有已存储的键值对。 ...
然而,Memcache 可以利用多个核心,通过一个可执行文件和一个TCP端口实现更高的并发性能。当涉及到大数据值(如100k及以上)时,Memcache 通常表现得更快。尽管 Redis 已经对大数据处理进行了优化,但在这种特定场景...
NoSQL,全称为“Not Only SQL”,是一种非关系型数据库技术,主要针对大规模数据分布式存储、高并发读写、实时性需求以及对海量数据高效存储和访问的需求。NoSQL数据库的特点在于它们通常不遵循传统的ACID(原子性、...
支持多线程并发访问。 - **应用场景**:适合短期缓存,如会话存储,减少对数据库的频繁读写。 - **面试题**:如何解决Memcached的单点故障问题?Memcached如何进行数据备份? 2. **Redis**: - **简介**:Redis...
- **计数器**:使用原子增减操作实现计数器功能。 - **排行榜**:使用Sorted Set实现排名功能。 #### 37、假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来? 使用`...
Memcached是一款高性能的分布式内存对象缓存系统,通过减轻数据库负载来加速动态Web应用,提升网站访问速度。本文将深入解析memcached的基本命令,涵盖其安装、配置、启动及数据管理等方面,旨在为用户提供全面的...