memcached可以用来加锁吗?

2024-01-10

memcached可用于缓存静态数据,这可以减少数据库查找,并且通常不会memcached.get(id) and memcached.set(id).

但是,将其用于锁定机制可以吗?做memcache.set and memcached.get如果存在数据,则始终提供数据,或者如果请求花费太多时间,它只会返回 None 吗?

我想避免并发访问由 a 标识的特定资源id我使用这个逻辑:

def access(id):
    if memcache.get(id):
        return access
    else:
        memcache.set(id)
        return true

如果任何用户尝试访问该资源,如果memcache.get(id) = username返回一个值,我们拒绝访问,否则我们拒绝访问memcache.set(id) = username停止后续访问并允许当前用户访问。

使用可以吗memcached像这样?将要set and get如果数据可用,无论花费多少时间,实际上都会提供数据,或者是否会在尽可能短的时间内从我发现的任何内容中给出最佳结果(例如:保证 memcached 锁 https://stackoverflow.com/a/6538938/452102)到目前为止属于前一类,可能不适用于锁定,尽管它可能在 99% 的情况下都有效。

谁能澄清一下是否有替代的锁定机制?


对于对此感兴趣的任何人,我在 Memcached Github 上创建了一个线程:memcached 能否可靠地实现锁定机制? https://github.com/memcached/memcached/issues/163。它解释了使用时的一些常见注意事项get and set以及如何避免使用add。有些博客也解释了这个问题,如果你可以搜索一下distributed locking using memcache在您最喜欢的搜索引擎上。

还有一个相关问题Memcached、锁定和竞争条件 https://stackoverflow.com/questions/1608902/memcached-locking-and-race-conditions这可能有助于更清楚地了解内存缓存竞争条件。

Memcache 论坛上有更多关于此问题的讨论:

Thread 1 https://groups.google.com/d/topic/memcached/Szb0tsR72HQ/discussion and Thread 2 https://groups.google.com/forum/#!topic/memcached/thhwPzg0O9U/discussion

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

memcached可以用来加锁吗? 的相关文章

  • 针对特定场景最好的Linux内核锁定机制是什么

    我需要解决这种情况的锁定问题 多CPU系统 所有 CPU 都使用公共 软件 资源 对资源的只读访问非常常见 传入网络数据包的处理 写访问的频率要低得多 仅进行了大部分配置更改 目前我使用的是read lock bh write lock b
  • 在 Windows 上非侵入式解锁文件

    有没有办法使用 Python 脚本在 Windows 上解锁文件 该文件被另一个进程独占锁定 我需要一个不终止或中断锁定过程的解决方案 我已经看过了门户锁 http code activestate com recipes 65203 一种
  • SQL Server 闩锁及其对性能问题的指示

    我试图了解我们的数据库 SQL 2008 的潜在性能问题 特别是一个性能计数器 SQLServer Latches Total Latch Wait Time Total Latch Wait Time ms 我们看到数据库响应时间变慢 我
  • 在 Zend Framework 2 中使用 Memcached 设置 ttl 和命名空间

    据我所知 这似乎是设置 Memcached 并设置 TTL 和命名空间的方法 但它们对缓存没有影响 该密钥没有命名空间前缀 并且过期时间是无限的 MemcachedOptions new Zend Cache Storage Adapter
  • 在 memcached 中存储 ActiveRecord 对象的最佳方式是什么?

    目前在 memcached 中存储 ActiveRecord 对象存在两个问题 未定义的类 模块问题 根据我所读到的内容 这仍然是一个没有人有真正好的解决方案的错误 cache fu 插件可能对此有最好的解决方案 将其检索调用包装在一个块中
  • 这个递归同步调用如何不死锁?

    我有一组方法 它们全部同步到类对象 不能使用 self 因为可以在多个线程中使用该对象的多个实例 其中一些方法调用类中也在类对象上同步的其他方法 不知怎的 这有效并且不会导致我期望的僵局 我假设 testA 将被阻止运行 因为 testB
  • 不相关的锁定语句之后的读指令是否可以移到锁定之前?

    这个问题是评论的后续this https stackoverflow com questions 40979715 do semaphores prevent instruction reordering thread 假设我们有以下代码
  • SQLAlchemy会话和连接关系

    是否使用相同的 SQLAlchemy 执行查询session对象使用相同的底层连接 如果没有 有没有办法保证这一点 一些背景 我需要使用 MySQL 的命名锁功能 即GET LOCK and RELEASE LOCK 功能 就MySQL服务
  • MySQL 中的乐观锁

    我在 MySQL 中找不到任何有关乐观锁定的详细信息 我读到 启动事务可以使两个实体的更新保持同步 但是 它不会阻止两个用户同时更新数据 从而导致冲突 显然乐观锁定可以解决这个问题 这在 MySQL 中是如何应用的 有相关的 SQL 语法
  • 如何返回 Google App Engine 中的所有 memcached 值?

    我想使用我的 python 应用程序引擎内存缓存中的所有数据 我事先不知道钥匙 我如何获取所有数据 唯一读过的功能 http code google com appengine docs python memcache functions
  • 如何使用 Memchached 后端和 Zend Framework 有选择地清除缓存(使用标签或其他选项)

    我们在 Web 项目中使用 Memcached 和 Zend Framework 现在 我们需要使用指定的标签有选择地清理缓存Zend Cache API http framework zend com manual 1 10 en zen
  • 启动 Memcached 时出错:无法监听 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我已经在我的服务器上运行 Memca
  • MySQL select for update 返回空集,即使存在一行

    我发现 MySQL 的 选择更新 有一个奇怪的问题 我使用的是5 1 45版本 我有两张桌子 mysql gt show create table tag Tabl
  • 如何使用 File#flock 发出非阻塞独占锁请求?

    如何申请非阻塞锁 为什么 Ruby 没有文件 flock http www ruby doc org core 2 0 File html method i flock当单独尝试锁定文件时是否按预期工作 将文件锁定在块中并不是此问题的正确解
  • C# 锁定传递给方法的引用 - 不好的做法?

    我有一个类似的方法 public static void DoSomething string param1 string param2 SomeObject o lock o o Things Add param1 o Update et
  • PHP memcache - 检查池中是否有可用的服务器?

    我有以下代码 cluster local array host gt 192 168 1 1 port gt 11211 weight gt 50 cluster local2 array host gt 192 168 1 2 port
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • 为什么在读取字典时要锁定

    我对我正在阅读的一本关于线程的书 C 3 in a Nutshell 中的代码列表感到困惑 在 应用程序服务器中的线程安全 主题中 给出了以下代码作为 UserCache 的示例 static class UserCache static
  • 主线程迭代之间的资源锁定(Async/Await)

    假设我有一个带有两个按钮的表单 button1 and button2 和资源对象 r 资源有自己的锁定和解锁代码来处理并发性 任何线程都可以修改资源 When button1单击后 其处理程序会进行一些修改r本身然后调用 Independ
  • PostgreSQL 和锁定

    希望一些比我更聪明的 DBA 可以帮助我找到一个好的解决方案来完成我需要做的事情 为了便于讨论 我们假设我有一个名为 work 的表 其中包含一些列 其中一列表示给定客户端对该行工作的所有权 场景是 我将连接 2 个客户端并轮询表以查找要完

随机推荐