redis pipeline
可以一次性插入多个key的数据
@RequestMapping(value = "/add/pipeline", method = RequestMethod.GET)
public void addpipeline() {
stringRedisTemplate.executePipelined(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
for (int i = 0; i < 10; i++) {
connection.set(("pipel:" + i).getBytes(), "123".getBytes());
}
return null;
}
});
}
redis lua
根据脚本插入数据,插入数据分为 eval和evalsha,evalsha是将脚本存到缓存中,等到插入数据的时候调用缓存。eval直接调用脚本
@RequestMapping(value = "/lua", method = RequestMethod.GET)
public void redislua(){
DefaultRedisScript<Void> redisScript = new DefaultRedisScript<>();
redisScript.setLocation(new ClassPathResource("redis.lua"));
stringRedisTemplate.execute(redisScript, Collections.singletonList("key1"), new String[]{"value1" });
}
源码是先调用的evalsha,不可以在用eval
protected <T> T eval(RedisConnection connection, RedisScript<T> script, ReturnType returnType, int numKeys, byte[][] keysAndArgs, RedisSerializer<T> resultSerializer) {
Object result;
try {
result = connection.evalSha(script.getSha1(), returnType, numKeys, keysAndArgs);
} catch (Exception var9) {
if (!ScriptUtils.exceptionContainsNoScriptError(var9)) {
throw var9 instanceof RuntimeException ? (RuntimeException)var9 : new RedisSystemException(var9.getMessage(), var9);
}
result = connection.eval(this.scriptBytes(script), returnType, numKeys, keysAndArgs);
}
return script.getResultType() == null ? null : this.deserializeResult(resultSerializer, result);
}
redis.lua 放到resource下面,KEYS[1]是能够取出key,ARGV是为了取出值。
return redis.call('set',KEYS[1],ARGV[1])
elasticsearch
1.倒排索引
与数据库的对应
ElasticSearch Index(索引) Type(类型) Document(文档) Fiedls(字段)
MySQL Database(数据库) Table(表) Row(行) Column(列)
2.postman查询所有的索引
http://127.0.0.1:9200/_cat/indices?v
3.添加索引:get
4.删除索引:delete
5.添加数据内容:
需要通过post添加数据
post:不是幂等性的,每次返回的_id不同
put:是幂等性的,每次添加的id需要相同
6.更新数据内容
用put全量更新数据,put是幂等性,更新数据唯一
用post更新部分数据,请求改成_update
更改之后的数据
删除数据,只能删除一次,再次删除会发现not_found
查询指定数据
查询确定字段的数据
当查询字段比如华为手机,因为包含手机,会把小米手机也查询出来
查询全量数据
选择从第二页开始,只显示“title”字段
按照价格price顺序查询数据
{
“query”:{
“match_all”:{
}
},
"from":2,
"size":2,
"_source":["price"],
"sort":{
"price":{
"order":"desc"
}
}
}