MemcacheService 接口
-
- 所有超级接口:
- BaseMemcacheService
public interface MemcacheService extends BaseMemcacheService
用于 App Engine 内存缓存服务的 Java API。 这为常用数据提供快速的分布式缓存。缓存在持续时间和总空间方面具有限制,因此,可能会随时丢弃存储其中的对象。请注意,
null
是在缓存中存储的合法值,或者将其用作缓存键。虽然该 API 是针对Object
编写的,但键和值都应为Serializable
,不过,将来的版本可能会接受特定类型的非Serializable
Objects
从此 API 返回的值是来自缓存的可变副本;除非使用一种
put
方法进行分配,否则更改它们不会对缓存的值本身产生影响。同样,返回集合的方法返回可变的集合,但更改不会影响缓存。对单个条目进行操作的方法(包括
increment(java.lang.Object, long)
)是原子的方法,而批量方法(如getAll(java.util.Collection<T>)
、putAll(java.util.Map<T, ?>, com.google.appengine.api.memcache.Expiration, com.google.appengine.api.memcache.MemcacheService.SetPolicy)
) 和deleteAll(java.util.Collection<T>)
不提供原子性。通过结合使用putIfUntouched(java.lang.Object, com.google.appengine.api.memcache.MemcacheService.IdentifiableValue, java.lang.Object, com.google.appengine.api.memcache.Expiration)
与getIdentifiable(java.lang.Object)
,对单个条目的任意操作可以原子方式执行。Increment
有许多使用注意事项:请参阅方法文档。ErrorHandler
配置错误处理方式。默认错误处理程序是LogAndContinueErrorHandler
的实例。在大多数情况下,这将记录底层错误情况并模拟缓存未命中的行为,而不是向调用代码抛出错误。例如,从get(Object)
返回null
。一种不太宽松的替代选择是
StrictErrorHandler
,它会抛出MemcacheServiceException
来向调用方显示错误以解决问题。为了保证所有
MemcacheServiceException
都定向到错误处理程序,请使用ConsistentErrorHandler
(例如ErrorHandlers.getConsistentLogAndContinue(Level)
或ErrorHandlers.getStrict()
)。
-
-
嵌套类摘要
嵌套类 修饰符和类型 接口和说明 static class
MemcacheService.CasValues
用于比较和设置值的容器。static interface
MemcacheService.IdentifiableValue
封装由getIdentifiable(java.lang.Object)
返回的对象。static class
MemcacheService.SetPolicy
-
方法摘要
所有方法 实例方法 抽象方法 弃用的方法 修饰符和类型 方法和说明 void
clearAll()
清空所有命名空间中所有值的缓存。boolean
contains(java.lang.Object key)
测试给定值是否位于缓存中,即使其值为null
。boolean
delete(java.lang.Object key)
从缓存中移除key
。boolean
delete(java.lang.Object key, long millisNoReAdd)
从缓存中移除给定键,并在此后millisNoReAdd
毫秒内阻止在MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT
政策下添加此键。<T> java.util.Set<T>
deleteAll(java.util.Collection<T> keys)
delete(Object)
的批处理版本。<T> java.util.Set<T>
deleteAll(java.util.Collection<T> keys, long millisNoReAdd)
delete(Object, long)
的批处理版本。java.lang.Object
get(java.lang.Object key)
提取之前存储的值,如果未设置,则为null
。<T> java.util.Map<T,java.lang.Object>
getAll(java.util.Collection<T> keys)
同时获取多个键。MemcacheService.IdentifiableValue
getIdentifiable(java.lang.Object key)
<T> java.util.Map<T,MemcacheService.IdentifiableValue>
getIdentifiables(java.util.Collection<T> keys)
同时对多个键执行 getIdentifiable。Stats
getStatistics()
提取一些有关缓存及其使用情况的统计信息。java.lang.Long
increment(java.lang.Object key, long delta)
以原子方式提取、增加和存储给定的整数值。java.lang.Long
increment(java.lang.Object key, long delta, java.lang.Long initialValue)
与正常增加类似,但允许使用键的可选初始值(如果在缓存中尚不存在)。<T> java.util.Map<T,java.lang.Long>
incrementAll(java.util.Collection<T> keys, long delta)
与正常增加类似,但使用相同的增量并行增加一批单独的键。<T> java.util.Map<T,java.lang.Long>
incrementAll(java.util.Collection<T> keys, long delta, java.lang.Long initialValue)
与正常增加类似,但使用相同的增量并行增加一批单独的键,并且可能会设置起始值。<T> java.util.Map<T,java.lang.Long>
incrementAll(java.util.Map<T,java.lang.Long> offsets)
与正常增加类似,但接受分别为每个键映射单独的可控制偏移。<T> java.util.Map<T,java.lang.Long>
incrementAll(java.util.Map<T,java.lang.Long> offsets, java.lang.Long initialValue)
与正常增加类似,但接受分别为每个键映射单独的可控制偏移。void
put(java.lang.Object key, java.lang.Object value)
简便的快捷方法,相当于put(key, value, null, SetPolicy.SET_ALWAYS)
。void
put(java.lang.Object key, java.lang.Object value, Expiration expires)
boolean
put(java.lang.Object key, java.lang.Object value, Expiration expires, MemcacheService.SetPolicy policy)
使用key
将新值存储到缓存中,但遵守有关现有条目的policy
。void
putAll(java.util.Map<?,?> values)
简便的多重放置,相当于putAll(values, expires, SetPolicy.SET_ALWAYS)
。void
putAll(java.util.Map<?,?> values, Expiration expires)
简便的多重放置,相当于putAll(values, expires, SetPolicy.SET_ALWAYS)
。<T> java.util.Set<T>
putAll(java.util.Map<T,?> values, Expiration expires, MemcacheService.SetPolicy policy)
<T> java.util.Set<T>
putIfUntouched(java.util.Map<T,MemcacheService.CasValues> values)
简便的快捷方式,相当于putIfUntouched(values, null)
。<T> java.util.Set<T>
putIfUntouched(java.util.Map<T,MemcacheService.CasValues> values, Expiration expiration)
boolean
putIfUntouched(java.lang.Object key, MemcacheService.IdentifiableValue oldValue, java.lang.Object newValue)
简便的快捷方式,相当于put(key, oldValue, newValue, null)
。boolean
putIfUntouched(java.lang.Object key, MemcacheService.IdentifiableValue oldValue, java.lang.Object newValue, Expiration expires)
仅当自从上次检索oldValue
以来没有存储其他值时,才能以原子方式存储newValue
。void
setNamespace(java.lang.String newNamespace)
-
从 com.google.appengine.api.memcache.BaseMemcacheService 接口继承的方法
getErrorHandler, getNamespace, setErrorHandler
-
-
-
-
方法详细信息
-
setNamespace
@Deprecated void setNamespace(java.lang.String newNamespace)
-
get
java.lang.Object get(java.lang.Object key)
提取之前存储的值,如果未设置,则为null
。如需区分null
值和未设置的设置,请使用contains(Object)
。如果反序列化该值时发生错误,则会将
InvalidValueException
传递给服务的ErrorHandler
。如果发生服务错误,则传递MemcacheServiceException
。请参阅BaseMemcacheService.setErrorHandler(ErrorHandler)
。- 参数:
key
- 用于存储缓存条目的键对象- 返回:
- 先前存储的值对象,或
null
- 抛出:
java.lang.IllegalArgumentException
- 如果key
不是Serializable
且不是null
-
getIdentifiable
MemcacheService.IdentifiableValue getIdentifiable(java.lang.Object key)
类似于get(java.lang.Object)
,但会返回一个稍后可用于执行putIfUntouched(java.lang.Object, com.google.appengine.api.memcache.MemcacheService.IdentifiableValue, java.lang.Object, com.google.appengine.api.memcache.Expiration)
操作的对象。如果反序列化该值时发生错误,则会将
InvalidValueException
传递给服务的ErrorHandler
。如果发生服务错误,则传递MemcacheServiceException
。请参阅BaseMemcacheService.setErrorHandler(ErrorHandler)
。- 参数:
key
- 用于存储缓存条目的键对象- 返回:
- 一个
MemcacheService.IdentifiableValue
对象,用于封装先前存储的值对象。如果缓存中不存在key
,则返回null
。 - 抛出:
java.lang.IllegalArgumentException
- 如果key
不是Serializable
且不是null
-
getIdentifiables
<T> java.util.Map<T,MemcacheService.IdentifiableValue> getIdentifiables(java.util.Collection<T> keys)
同时对多个键执行 getIdentifiable。 这比多次调用getIdentifiable(Object)
效率高。如果反序列化该值时发生错误,则会将
InvalidValueException
传递给服务的ErrorHandler
。如果发生服务错误,则传递MemcacheServiceException
。请参阅BaseMemcacheService.setErrorHandler(ErrorHandler)
。- 参数:
keys
- 应检索其值的键集合- 返回:
- 找到的任何条目的键和值之间的映射。如果在缓存中找不到请求的键,则返回的 Map 中不包括该键。
- 抛出:
java.lang.IllegalArgumentException
- 如果keys
的任何元素不是Serializable
且不是null
-
contains
boolean contains(java.lang.Object key)
测试给定值是否位于缓存中,即使其值为null
。请注意,由于可能会随时从缓存中删除对象,因此,以下内容并不是完善的代码:
if (memcache.contains("key")) { foo = memcache.get("key"); if (foo == null) { // continue, assuming foo had the real value null } }
问题在于,在调用contains(java.lang.Object)
和get(Object)
之间,缓存可能已丢弃该条目。下面是一个更完善的模式:foo = memcache.get("key"); if (foo == null) { if (memcache.contains("key")) { // continue, assuming foo had the real value null } else { // continue; foo may have had a real null, but has been dropped now } }
另一种方法是首选getAll(Collection)
,但它需要某种不需要的Collection
。- 参数:
key
- 用于存储缓存条目的键对象- 返回:
true
- 如果缓存包含键的条目- 抛出:
java.lang.IllegalArgumentException
- 如果key
不是Serializable
且不是null
-
getAll
<T> java.util.Map<T,java.lang.Object> getAll(java.util.Collection<T> keys)
同时获取多个键。 这比多次单独调用get(Object)
效率高,并且允许单次调用来测试contains(Object)
并提取值,因为返回将不包含找不到的键的映射。如果反序列化该值时发生错误,则会将
InvalidValueException
传递给服务的ErrorHandler
。如果发生服务错误,则传递MemcacheServiceException
。请参阅BaseMemcacheService.setErrorHandler(ErrorHandler)
。- 参数:
keys
- 应检索其值的键集合- 返回:
- 找到的任何条目的键和值之间的映射。 如果在缓存中找不到请求的键,则返回的 Map 中不包括该键。
- 抛出:
java.lang.IllegalArgumentException
- 如果keys
的任何元素不是Serializable
且不是null
InvalidValueException
- 对于在缓存值进行反序列化时出现的任何错误
-
put
boolean put(java.lang.Object key, java.lang.Object value, Expiration expires, MemcacheService.SetPolicy policy)
使用key
将新值存储到缓存中,但遵守有关现有条目的policy
。- 参数:
key
- 新缓存条目的键value
- 要存储的值expires
-Expiration
对象,用于设置基于时间的到期时间。null
可用于指示没有具体到期时间。policy
- 请求处理同一键下预先存在的条目。此参数不能是null
。- 返回:
- 如果创建了新条目,则为
true
;如果没有,则为false
(由于policy
的缘故) - 抛出:
java.lang.IllegalArgumentException
- 如果key
或value
不是Serializable
且不是null
MemcacheServiceException
- 如果服务器返回错误,并且未配置ConsistentErrorHandler
-
put
void put(java.lang.Object key, java.lang.Object value, Expiration expires)
- 参数:
key
- 新条目的键value
- 新条目的值expires
- 基于时间的Expiration
,或null
(表示无)- 抛出:
java.lang.IllegalArgumentException
- 如果key
或value
不是Serializable
且不是null
MemcacheServiceException
- 如果服务器返回错误,并且未配置ConsistentErrorHandler
-
put
void put(java.lang.Object key, java.lang.Object value)
简便的快捷方法,相当于put(key, value, null, SetPolicy.SET_ALWAYS)
。- 参数:
key
- 新条目的键value
- 新条目的值- 抛出:
java.lang.IllegalArgumentException
- 如果key
或value
不是Serializable
且不是null
MemcacheServiceException
- 如果服务器返回错误,并且未配置ConsistentErrorHandler
-
putAll
<T> java.util.Set<T> putAll(java.util.Map<T,?> values, Expiration expires, MemcacheService.SetPolicy policy)
put(java.lang.Object, java.lang.Object, com.google.appengine.api.memcache.Expiration, com.google.appengine.api.memcache.MemcacheService.SetPolicy)
的批处理变体。与多次调用相比,可通过服务更有效地进行实现。- 参数:
values
- 要添加到缓存中的键/值对映射expires
- 所有values
的到期时间,或null
(表示没有基于时间的到期时间)。policy
- 如果条目已存在或不存在时要执行的操作- 返回:
- 创建了条目的键的集合。
values
中的键可能不在返回的集合中(由于有关现有条目的policy
的缘故)。 - 抛出:
java.lang.IllegalArgumentException
- 如果任何键或值不是Serializable
且不是null
MemcacheServiceException
- 如果服务器返回任何给定值的错误,并且未配置ConsistentErrorHandler
-
putAll
void putAll(java.util.Map<?,?> values, Expiration expires)
简便的多重放置,相当于putAll(values, expires, SetPolicy.SET_ALWAYS)
。- 参数:
values
- 要添加到缓存中的键/值映射expires
- 新值的到期时间,或null
(表示没有基于时间的到期时间)- 抛出:
java.lang.IllegalArgumentException
- 如果任何键或值不是Serializable
且不是null
MemcacheServiceException
- 如果服务器返回任何给定值的错误,并且未配置ConsistentErrorHandler
-
putAll
void putAll(java.util.Map<?,?> values)
简便的多重放置,相当于putAll(values, expires, SetPolicy.SET_ALWAYS)
。- 参数:
values
- 要添加到缓存的新条目的键/值映射- 抛出:
java.lang.IllegalArgumentException
- 如果任何键或值不是Serializable
且不是null
MemcacheServiceException
- 如果服务器返回任何给定值的错误,并且未配置ConsistentErrorHandler
-
putIfUntouched
boolean putIfUntouched(java.lang.Object key, MemcacheService.IdentifiableValue oldValue, java.lang.Object newValue, Expiration expires)
仅当自从上次检索oldValue
以来没有存储其他值时,才能以原子方式存储newValue
。oldValue
是从上一次调用getIdentifiable(java.lang.Object)
返回的MemcacheService.IdentifiableValue
。如果
key
的缓存中存储了另一个值,或者该缓存条目已被逐出,则此调用不会存储任何内容,并且会返回false
。请注意,出于此目的,再次存储相同值会被计为“触及”。
结合使用
getIdentifiable(java.lang.Object)
和putIfUntouched(java.lang.Object, com.google.appengine.api.memcache.MemcacheService.IdentifiableValue, java.lang.Object, com.google.appengine.api.memcache.Expiration)
可构成一个操作,它要么以原子方式成功执行,要么因并发(或逐出)而失败(在这种情况下,应用可以重试整个操作)。- 参数:
key
- 条目的键oldValue
- 要与 newValue 进行比较的值的标识符newValue
- 当 oldValue 仍然存在时要存储的新值expires
- 用于设置基于时间的过期时间的Expiration
对象。null
可用于指示没有特定到期时间。- 返回:
- 如果存储了
newValue
则为true
,否则为false
- 抛出:
java.lang.IllegalArgumentException
- 如果key
或newValue
不是Serializable
,也不是null
。此外,如果oldValue
是null
,则会抛出 IllegalArgumentException。MemcacheServiceException
- 如果服务器返回错误,并且未配置ConsistentErrorHandler
-
putIfUntouched
boolean putIfUntouched(java.lang.Object key, MemcacheService.IdentifiableValue oldValue, java.lang.Object newValue)
简便的快捷方式,相当于put(key, oldValue, newValue, null)
。- 参数:
key
- 条目的键oldValue
- 要与 newValue 进行比较的值的标识符newValue
- 当 oldValue 仍然存在时要存储的新值- 返回:
- 如果
newValue
已存储则为true
,否则为false
。 - 抛出:
java.lang.IllegalArgumentException
- 如果key
或newValue
不是Serializable
,也不是null
。此外,如果oldValue
是null
,则会抛出 IllegalArgumentException。MemcacheServiceException
- 如果服务器返回错误,并且未配置ConsistentErrorHandler
-
putIfUntouched
<T> java.util.Set<T> putIfUntouched(java.util.Map<T,MemcacheService.CasValues> values)
简便的快捷方式,相当于putIfUntouched(values, null)
。- 参数:
values
- 要比较和交换的键/值对映射- 返回:
- 存储新值的键集。
- 抛出:
java.lang.IllegalArgumentException
- 如果任何键不是Serializable
或任何值不是Serializable
或null
java.lang.IllegalArgumentException
- 如果任何键或 newValues 不是Serializable
,也不是null
。如果values
具有任何 null,则也会抛出 IllegalArgumentException。MemcacheServiceException
- 如果服务器针对任何给定values
返回错误并且未配置ConsistentErrorHandler
-
putIfUntouched
<T> java.util.Set<T> putIfUntouched(java.util.Map<T,MemcacheService.CasValues> values, Expiration expiration)
putIfUntouched(Object, IdentifiableValue,Object,Expiration)
的批处理变体。这比多个单值调用效率高。- 参数:
values
- 要比较和交换的键/值对映射expiration
- 一个Expiration
对象,用于为值为null
expiration
的value
设置基于时间的到期时间。null
可用于指示没有特定到期时间。- 返回:
- 存储新值的键集。
- 抛出:
java.lang.IllegalArgumentException
- 如果任何键或 newValues 不是Serializable
,也不是null
。如果values
具有任何 null,则也会抛出 IllegalArgumentException。MemcacheServiceException
- 如果服务器针对任何给定values
返回错误并且未配置ConsistentErrorHandler
-
delete
boolean delete(java.lang.Object key)
从缓存中移除key
。- 参数:
key
- 要删除的条目的键。- 返回:
true
(如果条目存在但已被舍弃)- 抛出:
java.lang.IllegalArgumentException
- 如果key
不是Serializable
且不是null
-
delete
boolean delete(java.lang.Object key, long millisNoReAdd)
从缓存中移除给定键,并在此后millisNoReAdd
毫秒内阻止在MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT
政策下添加此键。但是,不会阻止使用MemcacheService.SetPolicy.SET_ALWAYS
调用put(java.lang.Object, java.lang.Object, com.google.appengine.api.memcache.Expiration, com.google.appengine.api.memcache.MemcacheService.SetPolicy)
方法。- 参数:
key
- 要删除的键millisNoReAdd
- 一个时间,在此时间内,应拒绝那些使用 ADD_IF_NOT_PRESENT 进行的调用。- 返回:
true
(如果存在要删除的条目)- 抛出:
java.lang.IllegalArgumentException
- 如果key
不是Serializable
且不是null
-
deleteAll
<T> java.util.Set<T> deleteAll(java.util.Collection<T> keys)
delete(Object)
的批处理版本。- 参数:
keys
- 要删除的条目的键集合- 返回:
- 删除的键的集合。存在于
keys
中但是不存于于返回的集中的任何键在缓存中找不到。返回集的迭代顺序与提供的keys
的迭代顺序匹配。 - 抛出:
java.lang.IllegalArgumentException
- 如果keys
的任何元素不是Serializable
且不是null
-
deleteAll
<T> java.util.Set<T> deleteAll(java.util.Collection<T> keys, long millisNoReAdd)
delete(Object, long)
的批处理版本。- 参数:
keys
- 要删除的条目的键集合millisNoReAdd
- 一个时间,在此时间内,应拒绝那些使用MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT
进行的调用。- 返回:
- 删除的键的集合。存在于
keys
中但是不存于于返回的集中的任何键在缓存中找不到。返回集的迭代顺序与提供的keys
的迭代顺序匹配。 - 抛出:
java.lang.IllegalArgumentException
- 如果keys
的任何元素不是Serializable
且不是null
-
increment
java.lang.Long increment(java.lang.Object key, long delta)
以原子方式提取、增加和存储给定的整数值。 “整数”类型为Byte
、Short
、Integer
、Long
,在某些情况下为String
。条目必须已存在,并且值不是负数。按正值递增将达到有符号的 64 位最大值 (
2^63 - 1
),然后返回到有符号的 64 位最小值 (-2^63
),并从该位置继续递增。为了方便使用原子倒计时,按负值递增(即,递减)不会小于零:如果将
2
增加-5
,则返回0
而不是-3
。注意:内存缓存中的所有数字的实际表示形式为字符串。 这意味着您最初将数字存储为字符串(例如,“10”),然后递增它,则一切正常。
当您为字符串值
get(Object)
键时,会在超出无符号 64 位数的最大值 (2^64 - 1
) 的最大值后进行封装。当您为数值类型get(Object)
键时,会在超出类型最大值后进行封装。如果发生服务错误,这会将
MemcacheServiceException
传递给服务的ErrorHandler
。请参阅BaseMemcacheService.setErrorHandler(ErrorHandler)
。- 参数:
key
- 要操作的条目的键delta
- 增量的大小(正数或负数)- 返回:
- 长整型正增量值。但是,键的
get(Object)
仍将具有原来的类型(Byte
、Short
等)。如果key
没有条目,则返回null
。 - 抛出:
java.lang.IllegalArgumentException
- 如果key
不是Serializable
,也不是null
InvalidValueException
- 如果对象递增不是整数类型或包含负值
-
increment
java.lang.Long increment(java.lang.Object key, long delta, java.lang.Long initialValue)
与正常增加类似,但允许使用键的可选初始值(如果在缓存中尚不存在)。请注意,提供的初始值可以是负数,允许递增负数。这与此方法的基本版本不同,后者要求在递增之前预先存在的值(例如使用
put(java.lang.Object, java.lang.Object, com.google.appengine.api.memcache.Expiration, com.google.appengine.api.memcache.MemcacheService.SetPolicy)
存储的值)为非负值。- 参数:
initialValue
- 要在键不存在时插入到缓存中的值- 另请参阅:
increment(Object, long)
-
incrementAll
<T> java.util.Map<T,java.lang.Long> incrementAll(java.util.Collection<T> keys, long delta)
与正常增加类似,但使用相同的增量并行增加一批单独的键。- 返回:
- 将键映射到其新值;如果无法增加这些值,或这些值在缓存中不存在,则值为 null
- 另请参阅:
increment(Object, long)
-
incrementAll
<T> java.util.Map<T,java.lang.Long> incrementAll(java.util.Collection<T> keys, long delta, java.lang.Long initialValue)
与正常增加类似,但使用相同的增量并行增加一批单独的键,并且可能会设置起始值。- 参数:
initialValue
- 要在键不存在时插入到缓存中的值- 返回:
- 将键映射到其新值;如果由于任何原因而无法增加这些值,则这些值为 null
- 另请参阅:
increment(Object, long)
-
incrementAll
<T> java.util.Map<T,java.lang.Long> incrementAll(java.util.Map<T,java.lang.Long> offsets)
与正常增加类似,但接受分别为每个键映射单独的可控制偏移。非常适于按总和及计数并行增加。- 返回:
- 将键映射到其新值;如果由于任何原因而无法增加这些值,则这些值为 null
- 另请参阅:
increment(Object, long)
-
incrementAll
<T> java.util.Map<T,java.lang.Long> incrementAll(java.util.Map<T,java.lang.Long> offsets, java.lang.Long initialValue)
与正常增加类似,但接受分别为每个键映射单独的可控制偏移。非常适于按总和及计数并行增加。如果键使用的初始值在缓存中不存在,调用者也可以传递这些值。- 返回:
- 将键映射到其新值;如果由于任何原因而无法增加这些值,则这些值为 null
- 另请参阅:
increment(Object, long)
-
clearAll
void clearAll()
清空所有命名空间中所有值的缓存。统计信息不受影响。
-
-