Esempio n. 1
0
  def set(self, key, value, expire=_DEFAULT_TTL, namespace=None):
    from kay.ext.live_settings.models import KayLiveSetting
    
    old_namespace = namespace_manager.get_namespace()
    try:
      if namespace is not None:
        namespace_manager.set_namespace(namespace)

      new_setting = KayLiveSetting(
          key_name=key,
          ttl=expire,
          value=value,
      )
      new_setting.put()

      # Set the memcached key to never expire. It only expires
      # if it is evicted from memory. TTLs are handled by the 
      # in-memory cache.
      memcache.set("kay:live:%s" % key, (value, expire))
       
      self._set_local_cache(key, value, ttl=expire, namespace=namespace)
    finally:
      if namespace is not None:
        namespace_manager.set_namespace(old_namespace)

    return new_setting
Esempio n. 2
0
    def set_multi(self, data, expire=_DEFAULT_TTL, namespace=None):
        from kay.ext.live_settings.models import KayLiveSetting

        old_namespace = namespace_manager.get_namespace()
        try:
            if namespace is not None:
                namespace_manager.set_namespace(namespace)

            data_items = data.items()
            db.put(
                map(
                    lambda x: KayLiveSetting(
                        key_name=x[0], ttl=expire, value=x[1]), data_items))
            memcache.set_multi(
                dict(
                    map(lambda x: ("kay:live:%s" % x[0], (x[1], expire)),
                        data_items)))

            for key, value in data_items:
                self._set_local_cache(key,
                                      value,
                                      ttl=expire,
                                      namespace=namespace)
        finally:
            if namespace is not None:
                namespace_manager.set_namespace(old_namespace)