一 简介
AS是Aerospike的简介,他是和redis一样的缓存,他比redis在某些条件下更快一些,但是AS的支持的数据结构比较单一,而redis支持的比较丰富。另外AS的bin的key有长度限制,大概16个字符。剩下的就不介绍了,开始进入增删改查。
Aerospike的数据结构介绍
- Namespace:类似于数据库(Database),是数据库的最高层次划分。
- Set:类似于表(Table),用于进一步在命名空间内对数据进行细分。
- Key:唯一标识一条记录。
- Bins:类似于列(Column),每条记录包含的字段和值。
二 查询
public Record queryRecord(String key){
Key key2 = new Key(namespace, setName, key);
Record record = null;
try{
record = client.get(null, key2);
}catch(Exception e){
log.error("AS查询数据失败, key={}", key2);
throw new RuntimeException("AS查询数据失败");
}
return record;
}
三 增加
// 向as中报错一条int的value数据
public boolean saveOneData(String keyName, String binName, Long value){
Key key = new Key(namespace, setName, key);
Bin bin = new Bin(binName, value);
try{
client.put(null, key, bin);
}catch(Exception e){
log.error("AS添加数据失败, key={}", key);
throw new RuntimeException("AS添加数据失败");
}
return true;
}
// 实际bin的value是一个Object,放什么类型都可以
public boolean saveData(String keyName, String binName, String value){
Key key = new Key(namespace, setName, key);
Bin bin = new Bin(binName, value);
try{
client.put(null, key, bin);
}catch(Exception e){
log.error("AS添加数据失败, key={}", key);
throw new RuntimeException("AS添加数据失败");
}
return true;
}
// 还有一个统计数量的新增,这个方法的新增是原子性的
public boolean addExternalInt(String keyName, String binName, Integer value, Integer expire){
// 设置过期时间
WritePolicy policy = asConfig.expireWritePolicy(expire);
Key key = new Key(namespace, setName, keyName);
// 每次操作需要增加的数量
Bin bin = new Bin(binName, Integer.valueof(value));
try{
client.add(policy, key, bin);
}catch(Exception e){
log.error("AS添加数据失败, key={}", key);
return false;
}
}
// 原子性的保存
public boolean save(String keyName, Object value, Integer expire){
// 设置过期时间
WritePolicy policy = asConfig.expireWritePolicy(expire);
Key key = new Key(namespace, setName, keyName);
String name = "name";
Bin bin = new Bin(name, value);
try{
Record record = client.operate(policy, key, Operation.put(bin), Operation.get(name));
}catch(Exception e){
log.error("AS添加数据失败, key={}", key);
return false;
}
}
四 删除
// 根据key删除
public void delete(String key){
Key key = new Key(namespace, setName, key);
try{
//witePolicy是as自带的,直接注入使用就行@Autowired private WitePolicy witePolicy;
client.delete(witePolicy, key);
}catch(Exception e){
log.error("AS删除数据失败, key={}", key);
throw new RuntimeException("AS删除数据失败");
}
}
// 删除key中的bin
public void deleteByBinName(String keyName, String binName){
Key key = new Key(namespace, setName, key);
Bin binToDel = Bin.asNull(binName);
try{
client.put(null, key, binToDel);
}catch(Exception e){
log.error("AS删除数据失败, key={}", key);
throw new RuntimeException("AS删除数据失败");
}
}
五 判断key是否存在
public Boolean keyIsExists(String key){
Key key2 = new Key(namespace, setName, key);
Boolean exists;
try{
exists = client.exists(null, key2);
}catch(Exception e){
log.error("AS删除数据失败, key={}", key2);
throw new RuntimeException("AS删除数据失败");
}
return exists;
}