Redis lua脚本无法正常工作(Redis lua script not working)
我创建了一个redis lua脚本来执行基于密钥数据类型的命令: -
local keyType = redis.call("TYPE", KEYS[1]) if (keyType == "string") then return redis.call("GET",KEYS[1]) else return nil end
每次执行它都会返回null。可以帮助纠正脚本。
I have created a redis lua script to execute a command based on key data type :-
local keyType = redis.call("TYPE", KEYS[1]) if (keyType == "string") then return redis.call("GET",KEYS[1]) else return nil end
It is returning null every time I am executing it.Can any please help in correcting the script.
原文:https://stackoverflow.com/questions/35315176
最满意答案
第一个将导致未定义的行为,因为您走出字符串文字的边界(下溢)
第二个示例也是未定义的,因为您访问的地址不能保证可访问,甚至不存在。
限制内存位置不是C,而是OS和编译器。
The first will result in undefined behavior, as you are going out of the boundaries of the string literal (underflow)
The second is example is undefined as well, as you access address that are not guaranteed to be accessible, or even exist.
The off-limit memory locations are not of C, but of the OS and the compiler.
相关问答
更多-
C中的禁止内存位置(Off-limit memory locations in C)[2023-11-29]
第一个将导致未定义的行为,因为您走出字符串文字的边界(下溢) 第二个示例也是未定义的,因为您访问的地址不能保证可访问,甚至不存在。 限制内存位置不是C,而是OS和编译器。 The first will result in undefined behavior, as you are going out of the boundaries of the string literal (underflow) The second is example is undefined as well, as you a ... -
第三个块应该是“var1:goodbye var2:goodbye”,因为var1和var2应该是相同的内存位置。 不, var1和var2存在于不同的内存位置。 将一个结构的实例分配给另一个结构将源结构使用的内存区域blits(复制)到目标结构的内存区域。 在此操作之后,它们仍然是内存中的独立对象,您只需将所有成员的值从一个复制到另一个。 对一个对象的未来更改不会影响另一个对象,除非您将其中一个再次复制到另一个对象上。 The third block should be "var1: goodbye va ...
-
一旦通过调用delete来释放内存并尝试再次访问该地址处的内存,它就是一个未定义的行为 。 该标准没有要求编译器在这方面做任何特殊的事情。 它不要求编译器用0或某些特殊的幻数来标记去分配的内存。它被忽略为编译器的实现细节。 一些编译器实现会用一些特殊的幻数来标记这样的内存,但这是留给每个编译器实现的。 在你的情况下,数据仍然存在于解除分配的地址,因为可能没有其他需要内存重新使用的内存需求,并且编译器没有清除先前分配的内容(因为不需要) 。 但是,你不应该依赖这个,因为这可能并非总是如此。 它仍然是并且将是一 ...
-
在获取它的容器末尾引用迭代器是未定义的行为,并且无所事事只是一种可能性。 请注意,这是一个折中的问题,迭代器检查开发的有效性是很好的,但是会为代码增加额外的操作。 在默认情况下,MSVS迭代器会被检查(他们会验证它们是有效的,并且在以错误的方式使用时会失败,但这也会对运行时性能产生影响。 Dinkumware(VS内部的STL)提供的解决方案(默认选中,可以通过编译器选项取消选中)实际上是一个不错的选择,用户可以选择是否需要缓慢安全的迭代器或快速安全的迭代器。 但从语言的角度来看,两者都是有效的。 Dere ...
-
类的内存位置(指C ++对象模型书内)(Memory locations of classes (refers to Inside the C++ object model book))[2023-02-21]
静态数据成员驻留在全局变量和普通静态变量所驻留的相同内存区域中。 它是“类内存”,可以在堆栈或堆上,具体取决于类的实例是如何创建的。 静态数据成员与全局变量没有太大区别。 但是,它由类名限定,并且可以通过public , private和protected来控制其按名称访问。 public可以访问每个人。 private将仅限制对类成员的访问,并且protected类似于private但扩展了对从具有静态数据成员的类继承的类的访问。 相反,每个人都可以通过名称访问全局变量。 可以通过同一源文件中的代码按名称 ... -
C ++中的删除如何知道要删除多少内存位置(How does the delete in C++ know how many memory locations to delete)[2022-05-14]
只有delete操作符, free存在只作为函数。 在C ++下,建议您使用new / delete over malloc() / free() 。 删除操作符中有一个内部的“魔术”。 当使用new[]创建数组时,数组的大小将存储在内存块的元数据中。 delete[]使用该信息。 所有这些当然都是编译器,操作系统,优化器和实现相关的。 There is only delete operator, free exist only as function. Under C++, you are encoura ... -
在C ++中有没有办法从不同的内存位置打印char *?(In C++ is there a way to print char* from different memory locations?)[2023-03-22]
您想要的结构(或我认为您想要的)的标准名称是一根绳子 - 它就像一个带有统一界面的复合字符串序列。 关于绳索的其他问题有一些关于它们的讨论,以及与SGI扩展的链接。 如果您选择了现有的实现,请检查子字符串的可变性是否以您想要的方式工作 - 有些可能会实现写入时复制。 The standard name for the structure you want (or that I think you want) is a rope - it's like a compound sequence of strin ... -
T t = x; 称为复制初始化 。 它: 它试图将x转换为T &类型的对象 然后将该对象复制到初始化对象t 。 所以你的代码声明, Point ppaa = *new Point; 在freestore / heap上创建一个Point obejct 然后复制该对象以创建堆栈对象ppaa 。 这两个对象都是不同的对象。 如您所见,执行此语句后,您没有任何指向堆对象的指针。 在这种情况下,您需要将new返回的地址传递给delete ,因为您不再拥有该地址,导致内存泄漏。 此外,请注意&ppaa不返回ne ...
-
您可以使用英特尔创建的工具Pin监控存储器存储,读取,寄存器内容等。 这是MIT的一个项目,它模拟处理器缓存 (指令和/或数据)。 引脚用于创建详细的指令跟踪,然后将跟踪用作缓存模拟器的输入。 You can monitor memory stores, reads, contents of registers, etc. with Pin, a tool created by Intel. Here is a project from MIT that simulates a processor cach ...
-
内存位置和范围(Memory locations, and ranges)[2021-12-25]
假设长8字节,短2字节和存储器是4字节对齐结构的大小是8字节+ 3比特+ 6比特+ 2字节= 8 + 4 = 12字节。 x [1]只是&x [1] [0]。 如果x是0xaaa,则x [1]是0xaaa +(5 * 12)= 0xaaa + 60。 所以x [1]距离x 60个字节。 Assuming long 8 bytes, short 2 bytes and memory is 4 bytes aligned size of struct is 8 byte + 3 bit + 6 bit + 2 ...