数据存储

基础概念

用途

数据缓存服务主要用于高并发,低延迟的简单数据写入读取,性能好,响应时间短,但是只支持类Key-Value方式的写入读取,当前支持 String(字符串), HashMap(哈希表), List(列表), Set(集合) 四种数据结构。具体数据结构的含义,可以参考redis。

术语

名字 中文描述 语义
String 字符串 字符串
HashMap 哈希表 哈希表
List 列表 列表
Set 集合 集合
Key Key 唯一表示一个String, HashMap, List, Set
Value Value 值,一般为字符串
field hash表中的key

接口

  • 通用接口
名字 描述 支持数据结构
del 删除一个或多个key String, HashMap, List, Set
exists 检查key是否存在 String, HashMap, List, Set
expire 设置key过期时间 String, HashMap, List, Set
persist 移除key的过期时间 String, HashMap, List, Set
ttl 查看Key的剩余过期时间 String, HashMap, List, Set
type 查看key的存储类型 String, HashMap, List, Set
  • String接口
名字 描述
get 获取key所关联的字符串的值
mGet 获取多个key的值
set 设置value
mSet 同时设置一个或多个 key-value 对
setEx 将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)
setNx key不存在时,将key的值设置为value
getSet 将给定 key 的值设为 value ,并返回 key 的旧值
incr 加1
incrBy 加N
incrByFloat 加一个符点数
decr 减1
decrBy 减N
append 字符串追加
strlen 字符串的长度
  • HashMap接口
名字 描述
hGet 返回哈希表 key 中给定域 field 的值
hMGet 返回哈希表 key 中,一个或多个给定域的值
hSet 将哈希表 key 中的域 field 的值设为 value
hMSet 同时将多个 field-value (域-值)对设置到哈希表 key 中
hSetNx 将哈希表 key 中的域 field 的值设为 value, 如果field已存在,不执行
hGetAll 返回哈希表 key 中,所有的域和值
hDel 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略
hExists 查看哈希表 key 中,给定域 field 是否存在
hIncrBy 为哈希表 key 中的域 field 的值加上增量 increment
hIncrByFloat 为 key 中所储存的值加上浮点数增量 increment
hKeys 返回哈希表 key 中的所有域
hVals 返回哈希表 key 中所有域的值
hLen 哈希表 key 中域的数量
hStrlen 返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度
  • List接口
名字 描述
lIndex 返回列表 key 中,下标为 index 的元素
lInsertBefore 将值 value 插入到列表 key 当中,位于值 pivot 之前
lInsertAfter 将值 value 插入到列表 key 当中,位于值 pivot 之后
lLen 返回列表 key 的长度
lPush 将一个或多个值 value 插入到列表 key 的表头
lPushX 仅当 key 存在并且是一个列表时, 将值 value 插入到列表 key 的表头
rPush 将一个或多个值 value 插入到列表 key 的表尾
rPushX 仅当 key 存在并且是一个列表时, 将值 value 插入到列表 key 的表尾
lPop 移除并返回列表 key 的头元素
rPop 移除并返回列表 key 的尾元素
lSet 将列表 key 下标为 index 的元素的值设置为 value
rRem 根据参数 count 的值,移除列表中与参数 value 相等的元素。
  • Set接口
名字 描述
sAdd 将一个或多个 member 元素加入到集合 key 当中
sCard 集合中的元素数量
sIsMember 判断 member 元素是否集合 key 的成员
sMembers 返回集合 key 中的所有成员
sPop 移除并返回集合中的一个随机元素
sRandMember 返回集合中的一个随机元素
sRem 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略

使用实例

String实例

  • 添加用户ID与用户名的映射
String uid = "1";
String name = "allen";

ac.cache().set(uid, name);
  • 根据用户ID查用户名
String uid="1";

String name = ac.cache().get(uid);
if (name == null) {
  System.out.println("user is not exist");
} else {
  System.out.println("user is " + name);
}

HashMap实例

  • 添加用户的profile
String uid = "1";
ACObject kvs = new ACObject();
kvs.put("name", "allen");
kvs.put("age", "18");
kvs.put("sex", "man");

ac.cache.hMSet(uid, kvs);
  • 查看用户ID为1的用户的名字
String uid = "1";

String name = ac.cache().hGet(uid);
if (name == null) {
  System.out.println("user is not exist");
} else {
  System.out.println("user name is " + name);
}

List实例

  • 记录用户id=1的最近一次登录时间timestamp
String uid = "1";
String timestamp = "2018-04-01 15:04:05";

long length = ac.cache.lPush(uid, timestamp);

Set实例

  • 为用户组group1添加一个新的用户uid=1
String group = "group1";
String uid = "1";

long length = ac.cache.sAdd(group, uid);
  • 查看用户组group1中是否有用户uid=1
String group = "group1";
String uid = "1";

boolean isMember = ac.cache.sIsMember(group, uid);