ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis pipeline+lua+es

2021-05-23 22:59:40  阅读:208  来源: 互联网

标签:pipeline redis var9 lua connection new 数据


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"
    }
}

}

标签:pipeline,redis,var9,lua,connection,new,数据
来源: https://blog.csdn.net/hbyhhh/article/details/116458502

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有