`
qianshangding
  • 浏览: 127966 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Memcached之原子性(6)

 
阅读更多

Memcached所有单个命令都是原子性的。

如果针对同一个Item发送一个set命令和一个get命令,这两个命令之间是不会有影响的。即使是在多线程环境下,所有的命令也都是原子性的,但是我们要注意单个命令是原子性的,但是命令和命令之间的序列不是原子性的。例如使用get命令获取一个Item,然后通过set命令修改该Item,这个时候Memcached是无法保证该Item的值或其他属性不会被其他的进程修改的。同理,在并发环境下,当前线程也可能会修改其他进程set的Item。

那么有没有办法做到原子性呢?

答案是肯定的(不然写这个文章干嘛^-^),Memcached 1.2.5以及更高版本提供了gets和cas命令这两个命令,它们可以解决上面描述的问题。

第一步:通过gets命令查询某个Item的话,Memcached会返回一个该Item的当前值的唯一标示。

第二步:通过cas命令更新的值和唯一标示一起发送到Memcached。如果当前Item的唯一标示和cas提供的唯一标示一样,那么写操作就成功;如果其他线程修改了Item,那么该唯一标示就改变了,那么写操作就失败。


gets和cas命令如何使用,请查看:Memcached之存储命令(2)


分享到:
评论

相关推荐

    python-memcached python-memcached

    4. **原子操作**:Python-memcached支持原子操作,如增加(incr)、减少(decr)整数值,这些操作在多线程环境下是安全的。 5. **前缀支持**:通过设置键的前缀,可以在同一个Memcached实例中隔离不同应用的数据,...

    memcached-1.5.11.tar.gz

    4. 基于一致性哈希的分布式策略:在多台服务器部署时,Memcached使用一致性哈希算法,保证数据迁移时尽可能少地改变映射关系。 四、Memcached的API及使用 1. 客户端库:Memcached提供了多种语言的客户端库,如PHP...

    memcached数据完整迁移到redis

    3. **事务支持**:Redis 提供事务功能,可以确保一系列操作的原子性。 4. **发布/订阅**:Redis 的发布/订阅模式使得实时消息传递成为可能,适合构建消息队列或事件驱动的架构。 5. **高可用性**:Redis 的主从复制...

    memcached安装包以及java所需的memcached架包

    4. **高级特性**:Java客户端还支持过期时间、操作原子性、数据序列化等高级功能,可以根据应用需求灵活使用。 **注意事项**: - memcached不提供数据持久化,所有存储的数据都存储在内存中,一旦服务重启,所有...

    memcached java客户端驱动包

    此外,还有`delete`用于删除键值对,`increment`和`decrement`用于原子性地增加或减少数值键的值。 ### 2. 集群支持 驱动包支持Memcached的集群方案,这意味着开发者可以连接到多个Memcached服务器,从而实现数据...

    java_memcached-release_2.5.1.jar Memcache java jar 包

    这些操作通常都是原子性的,确保了数据的一致性。 3. **序列化与反序列化**:Java Memcached客户端库通常会处理对象到字节流的转换,以便于在网络中传输,并在接收端将字节流还原为对象。这使得可以存储任何类型的...

    java中连接memcached服务器

    例如,可以使用`client.incr()`或`client.decr()`方法进行原子性地增加或减少某个键对应的整数值。 在实际应用中,为了提高系统的健壮性和可扩展性,你可能需要连接多个Memcached服务器。这时可以使用`...

    Memcached1.4.4-14

    - 可以通过添加更多服务器节点构建Memcached集群,以提高容错性和扩展性。 总结,Memcached 1.4.4-14是一个强大的内存缓存系统,适用于.NET环境,通过第三方库可以方便地进行集成和使用。正确配置和优化Memcached...

    Memcached-1.49 源代码

    主要有`get`、`set`、`delete`等基本操作,以及`incr`和`decr`用于原子性地增加或减少数值。 8. **扩展性**:由于其轻量级的特性,Memcached可以轻松地水平扩展,只需在集群中添加更多服务器即可处理更大流量。 9....

    memcached完全剖析

    - **增一和减一操作**:可以对整型数据进行原子性的增加或减少操作。 #### 理解memcached的内存存储 **SlabAllocation机制** - **主要术语**:SlabAllocation是一种内存分配策略,它将内存划分为多个固定大小的块...

    memcached全面剖析.pdf

    - **增一和减一操作**: 支持原子性的递增和递减操作,例如`$cache->increment('counter');`或`$cache->decrement('counter');`。 #### memcached的内存管理机制 - **Slab Allocation机制**: memcached使用Slab ...

    Memcached Redis MongoDB对比

    MongoDB不支持事务,但可以利用单个文档的原子操作保证数据的一致性。 数据分析: MongoDB内置了数据分析功能,如mapreduce,使得它能够在数据库层面执行数据分析和处理。而Redis、Memcached则不具备这样的功能。 ...

    python-memcached-latest.tar

    在分布式环境中,Memcached可以通过一致性哈希算法实现数据在多个节点间的自动分布。这允许在添加或移除服务器时,尽可能少地重新分布数据,保持系统的稳定性和性能。 总的来说,`python-memcached-latest.tar`提供...

    memcached for win32

    6. **客户端连接**:各种编程语言都有 Memcached 的客户端库,用于与服务端通信,如 PHP、Python、Java、C# 等。 7. **数据操作**:基本操作包括 `set`(存储)、`get`(获取)、`delete`(删除)以及 `increment` ...

    memcached源码

    - 无锁数据结构:使用原子操作来更新数据,保证了并发环境下的正确性。 8. **一致性哈希** - 在分布式环境中,`memcached`通过一致性哈希算法实现负载均衡和数据分布,减少节点变化时的数据迁移。 9. **性能优化...

    python-memcached

    6. **原子操作**:Python-Memcached支持原子操作,如自增(increment)和自减(decrement),这对于计数等场景非常有用。 7. **预加载机制**:Python-Memcached库还包含了预加载功能,可以在程序启动时预先加载一...

    memcached-1.4.5(含安装注册说明)

    - ** incr/decr**: `incr(key, delta)`和`decr(key, delta)`用于原子性地增加或减少数值型缓存的值。 ### 性能优化 为了进一步提升Memcached的性能,可以考虑以下策略: 1. **缓存预热**: 在应用启动时预先加载...

    Memcached分布式缓存

    - **memcached进程**:每个memcached进程负责一部分缓存数据,通过一致性哈希算法分布到不同的服务器上。 - **memcached使用方法和客户端**:mixi开发了自己的客户端库,并使用了各种监控工具来确保memcached集群的...

    memcached for java client 例子

    4. **基本操作**:Java客户端库提供了一系列API,如`set()`用于存储数据,`get()`用于获取数据,`delete()`用于删除数据,`incr()`和`decr()`用于原子性地增加或减少数值。 5. **数据过期策略**:memcached中的数据...

Global site tag (gtag.js) - Google Analytics