首页 > 数据库 >redis里使用lua脚本对hash里的数据进行排序

redis里使用lua脚本对hash里的数据进行排序

时间:2023-04-14 16:44:37浏览次数:33  
标签:countryEquals arr languageEquals end redis return lua hash

注意:本脚本只适用于数据量较少的集合进行排序,数据量太大会严重影响redis的性能。

local t = redis.call('hgetall', KEYS[1]);
local arr = {};
for i, v in pairs(t) do
    if i % 2 == 0 then
        local j = cjson.decode(v)
        if j.language == ARGV[1] then j.languageEquals = 1 else j.languageEquals = 0 end;
        if j.country == ARGV[2] then j.countryEquals = 1 else j.countryEquals = 0 end;
        table.insert(arr, j)
    end    
end 
table.sort(arr, function (a, b) 
    if a.languageEquals - b.languageEquals == 0 then
        if a.countryEquals - b.countryEquals == 0 then 
            return a.createTime < b.createTime
        else return a.countryEquals > b.countryEquals end;
    end;
    return a.languageEquals > b.languageEquals;
end)
return cjson.encode(arr); 

 

标签:countryEquals,arr,languageEquals,end,redis,return,lua,hash
From: https://www.cnblogs.com/math-and-it/p/17318770.html

相关文章

  • Redis主从复制模式原理及演进
    一、主从模式主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主......
  • Linux系统之使用yum安装Redis数据库
    (Linux系统之使用yum安装Redis数据库)一、redis介绍1.redis解释Redis(RemoteDictionaryServer),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。2.redis特点1.性能极高–Redis能读的速度......
  • HashMap内部的bucket(桶)数组长度为什么一直都是2的整数次幂?
    这样做有两个好处:第一,可以通过(table.length-1)&key.hash()这样的位运算快速寻址,第二,在HashMap扩容的时候可以保证同一个桶中的元素均匀的散列到新的桶中,具体一点就是同一个桶中的元素在扩容后一半留在原先的桶中,一半放到了新的桶中。......
  • Python 之操作redis
    一、示例代码importredispool=redis.ConnectionPool(host='127.0.0.1',port=6379,password="",max_connections=10)redis_obj=redis.Redis(connection_pool=pool,decode_responses=True)#操作字符串redis_obj.set(name="password",valu......
  • Vue.js history模式与hash模式
    视频13.路由器的两种工作模式对于一个url来说,什么是hash值?——#及其后面的内容就是hash值。hash值不会包含在HTTP请求中,即:hash值不会带给服务器。hash模式:地址中永远带着#号,不美观。若以后将地址通过第三方手机app分享,若app校验严格,则地址会被标记为不合法。兼容性较......
  • 数据结构与对象------Redis
    参考《Redis设计与实现》系列文章目录和关于我一丶简单动态字符串当redis需要的不仅仅是一个字符串字面量,而是一个可以被修改的字符串值时,就会使用SDS(simpledynamicstring)来表示字符串值。比如setmsg"helloworld"将创建一个新键值对,键值对的键是一个字符串对象(存储着msg),......
  • docker 容器操作、应用部署、mysql,redis,nginx、迁移与备份、Dockerfile
    容器操作#启动容器dockerstart容器id#停止容器dockerstop容器id#文件拷贝先创建文件mkdir:文件夹vivimtouch:文件#容器的文件copy到宿主机上(不是在容器内部操作)dockercp容器名称:容器目录需要拷贝的文件或目录dockercp......
  • redis 工具类
    redis工具类/***Redis工具类*/@ComponentpublicclassRedisUtil{@ResourceprivateRedisTemplate<String,Object>redisTemplate;publicRedisUtil(RedisTemplate<String,Object>redisTemplate){this.redisTemplate=redisT......
  • 在Windows环境下搭建Redis集群
    安装Redis下载Windows版本Redis下载地址:https://github.com/MicrosoftArchive/redis/releases我下载了当前最新版本:Redis-x64-3.0.504.zip下载后,将文件解压到D:\Program_Files\redis\redis-cluster目录(目录可以自定义,路径上不要有空格)创建Redis集群节点Redis集群至少需要6个节点,3......
  • 【Docker】容器操作 mysql部署 redis部署 nginx部署 迁移与备份 Dockerfile
    目录上节回顾今日内容1容器操作2应用部署2.1mysql部署2.2redis2.3nginx3迁移与备份4Dockerfile练习上节回顾#1docker启动,停止,查看状态命令 systemctlstartdockersystemctlstopdockersystemctlstatusdockerdockerinfo#查看详情systemc......