首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

初学乍练redis:事务与脚本

exec命令的返回值就是这些命令返回值组成的列表,返回值顺序和命令的顺序相同。 redis保证一个事务中的所有命令要么都执行,要么都不执行。...而只要有一个命令有语法错误,执行exec命令后redis就会直接返回错误,连语法正确的命令也不会执行。 (2)运行错误。运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的键。...watch命令可以监控一个或多个键,一旦其中有一个键被修改或删除,之后的事务就不会执行。...字段存储错误信息) 错误 表2 Lua数据类型和redis返回值类型转换规则 (3)脚本相关命令 EVAL 编写完脚本后最重要的就是在程序中执行脚本。...有时候键名是根据脚本某部分的执行结果生成的,这时就无法在执行前将键名明确标出。比如一个集合类型键存储了用户ID列表,每个用户使用散列键存储,其中有一个字段是年龄。

1.1K20

Redis批量查询的四种技巧,应对高并发场景的利器!

它接受一个或多个键作为参数,返回与这些键关联的值。 以下是一个简要的描述: key1, key2, ..., keyN:要获取值的键列表。...在Redis中,使用了 Key 列表和参数列表来为Lua脚本提供更多的灵活性,执行 Eval 命令的格式为: 下图演示下 Lua 如何调用 Redis 命令 ,通过redis.call()来执行了 Redis...5.3 springboot例子 首先分别设置三个键(key:a, b, c)的值,然后分别设置键为 "myhashkey" 下的三个字段(field)的值, 并编写 Lua 脚本,执行 Lua 脚本并获取结果...4、Lua脚本: 使用 Lua 脚本的好处 : 减少网络开销。将多个请求通过脚本的形式一次发送,减少网络时延。 原子操作。Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。 复用。...客户端发送的脚本会永久存在 Redis 中,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。 当然 使用 Lua 脚本也会有瑕疵,编写和维护相对复杂。

5700
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    适合用于面试的一些redis基础知识的总结

    支持多种类型的数据结构,如 字符串(strings),散列(hashes),集合(sets), 有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs和地理空间(geospatial...Redis内置了复制(replication),LUA脚本(Lua scripting) LRU驱动时间(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence...512M字节的内容 列表(lists),简单的字符串列表,按照插入顺序排序。...LPUSH 插入一个新元素到列表头部,RPUSH插入一个新元素到列表的尾部。 有序列表(Sorted sets),每个字符串元素都关联一个score,里面的元素总是通过scored进行排序。...散列(hashes) bit maps, hyperloglogs, 用来做基数统计 PFADD: 指定元素添加到HyperLogLog中, PFCOUNT: 返回给定的HyperLogLog中的基数。

    43110

    惊艳!阿里内部445页爆款Redis源码分析宝典终开源

    第二篇:第9章讲解了Redis的生命周期,命令执行的过程,需要重点阅读;第10~19章,分别讲解了键、字符串、散列表、链表、集合、有序集合、GEO、HyperLog数据流相关命令的实现。...字符串key-value和超时时间存储在redisDb的字典里。 ? 第12章,本章主要介绍了Redis对外提供的散列相关命令的底层实现。...我们首先介绍Redis对散列结构的存储方式,即ziplist或者散列表,当field-valuc长度较短并且fiecld-value的个数较少时,Redis采用ziplist用于存储,否则使用散列表。...之后,总结了Redis的使用方便,整合这两种结构后对外提供的统一接口。最后,详细讲解了Redis是如何利用上述整合接口实现散列相关命令的。 ?...事物和Lua脚本都可以实现原子性,但Lua脚本的功能更加强大;发布订阅功能也可以使用Redis 5.0中新引入的Stream实现,具体可以参考本书Strcam章节的介绍。

    64930

    Spring认证中国教育管理中心-Spring Data Redis框架教程二

    序列化 发送到流的任何记录都需要序列化为其二进制格式。由于流与散列数据结构的接近性,流键、字段名称和值使用在RedisTemplate....只要选择了合适的序列化程序组合,其他消费者仍然能够读取记录。 HashMappers 将有效负载转换为Map具有特定类型的 a。确保使用能够(反)序列化散列的散列键和散列值序列化程序。...、散列键和散列值序列化器exec在返回之前反序列化所有结果。...RedisTemplate在返回之前使用其值、哈希键和哈希值序列化器对所有结果进行反序列化,因此前面示例中的返回项是字符串。...默认情况下,ScriptExecutor(or ReactiveScriptExecutor) 负责序列化提供的键和参数并反序列化脚本结果。这是通过模板的键和值序列化器完成的。

    1.3K20

    布隆过滤器实战【防止缓存击穿】

    (注:redis Module在redis4.0引入) 使用hiredis 调用redis pyreBloom 原生python 方法太慢,lua脚本和module 部署比较麻烦。...pyreBloom 使用cython编写。 bloom.h 里面实现BloomFilter的核心逻辑,完成与redis server的交互;hash函数;添加,检查和删除方法的实现。...由于无法扩展计数布隆过滤器表,因此必须事先知道要同时存储在过滤器中的最大键数。一旦超过表的设计容量,随着插入更多密钥,误报率将迅速增长。 Bonomi等人。...(2006)引入了一种基于d-left散列的数据结构,它在功能上是等效的,但使用的空间大约是计算BloomFilter的一半。此数据结构中不会出现可伸缩性问题。...与计数布隆过滤器不同,在每个元素插入时,散列计数器以散列变量增量而不是单位增量递增。要查询元素,需要考虑计数器的确切值,而不仅仅是它们的正面性。

    1.6K30

    Redis 字典

    散列表中查找元素的时候,我们通过散列函数求出要查找元素的键值对应的散列值,然后比较数组中下标为散列值的元素和要查找的元素。如果相等,则说明就是我们要找的元素;否则就顺序往后依次查找。...当插入的时候,我们只需要通过散列函数计算出对应的散列槽位,将其插入到对应链表中即可。 1.3.3 负载因子与rehash 我们可以使用负载因子来衡量散列表的“健康状况”。...2.2 Redis如何解决散列冲突 2.2.1 链表法 当有两个或以上的键被分配到散列表数组同一个索引上时,就发生了键冲突。Redis使用链表法解决散列冲突。...每个散列表节点都有一个next指针,多个散列表节点next可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以使用这个单向链表连接起来。...如图所示,当键k0和k1的经过散列函数得到索引值都为1时,就会使用next指针将两个节点连接起来。而由于节点没有指向链尾的指针,因此新的节点总是插入到链表的头部,排在已有节点的前面。

    1.7K84

    Redis快速入门

    支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。...这里HMSET,HEGTALL用户命令user:1是键。 列表 Redis的列表是简单的字符串列表,排序插入顺序。您可以添加元素到Redis的列表的头部或尾部。...Redis脚本使用Lua解释脚本用于评估计算。...它允许以大规模的计算能力,以多个内核和多个计算机,以及网络带宽向多台计算机和网络适配器。 分区的缺点 通常不支持涉及多个键的操作。...散列分区 在这种类型的分区,一个散列函数(例如,模数函数)被用于转换键成数字,然后数据被存储在不同redis的实例。

    2K50

    算法图解(五)|散列表与字典

    5.3 冲突 上面的叙述中,我们说到,散列函数总是将不同的键映射到数组的不同位置。实际上,几乎不可能编写出这样的散列函数。 例如我们存储商品单价,若采用按字母表顺序分配数组的位置的散列函数。...经验: (1)散列函数很重要。最理想的情况是,散列函数将键均匀地映射到散列表的不同位置。最糟糕的情况是将所有的键都映射到一个位置; (2)如果散列表存储的链表很长,散列表的速度将急剧下降。...在平均情况下,散列表的查找(获取给定索引处的值)速度与数组一样快,而插入和删除速度与链表一样快,因此它兼具两者的优点!但在最糟情况下,散列表的各种操作的速度都很慢。...调整散列表的长度:首先创建一个更长的新数组,通常将数组增长一倍,再使用函数hash将所有的元素都插入到这个新的散列表中。 调整散列表长度的工作需要很长时间!...总结: (1)散列表是一种功能强大的数据结构,其操作速度快,还能让你以不同的方式建立数据模型。 (2)散列表的查找、插入和删除速度都非常快。 (3)一旦填装因子超过0.7,就该调整散列表的长度。

    1.2K10

    详解布隆过滤器的原理和实现

    布隆过滤器优缺点 优点: 空间占用极小,因为本身不存储数据而是用比特位表示数据是否存在,某种程度有保密的效果。 插入与查询时间复杂度均为 O(k),常数级别,k 表示散列函数执行次数。...,假设: 位数组长度 m 散列函数个数 k 预期元素数量 n 期望误差_ε_ 在创建布隆过滤器时我们为了找到合适的 m 和 k ,可以根据预期元素数量 n 与 ε 来推导出最合适的 m 与 k 。...k 点是多个元素重复使用的,假如我们将其中一个元素的 k 点全部置为 0 则直接就会影响其他元素。...根据上面的算法原理可以知道实现布隆过滤器主要做三件事情: k 次散列函数计算出 k 个位点。 插入时将位数组中 k 个位点的值设置为 1。...下面来看看go-zero 是如何实现的: 对象定义 // 表示经过多少散列函数计算 // 固定14次 maps = 14 type ( // 定义布隆过滤器结构体 Filter

    87520

    redis常用数据类型和应用场景

    String HashMap Object可用类型 String Number bit 操作 SET 存入字符串键 SETNX 存入字符串键,如果已存在则失败...脚本吧多个操作包装成一个操作来保证事务完整性 缓存设计 存入结构化(序列化)数据,json,xml,protobuf 缺点:不适合大量修改(删除,重新创建) 合理的key设计配合批处理API 结构...HASH散列KEY HashMap> HSET HSETNX HGET HMSET HMGET HDEL HINCRBY 缓存设计 相比使用STRING...KEY替代String的场景 bit类型数据使用散列key无法直接操作 对数据物理分布有要求的场景, 在redis3.0 的cluster中,使用散列槽,使用crc16对key进行计算以分配到不同的实例...,散列KEY会导致一个表的数据全部被分配在一个实例上 应用场景 购物车 加购物车 HINCRBY userID:shoppingCart goodsID count 查询 HGETALL userID

    61810

    Redis详解

    //将一个或多个值value插入到key列表的表头(最左边) RPUSH key value [value ...]...//将一个或多个值value插入到key列表的表尾(最右边) LPOP key //移除并返回key列表的头元素 RPOP key //移除并返回key列表的尾元素...示例展示:         示例分析:              这个和底层实现有关,Redis的底层相当于一个HashMap(将数据散列存储到key中存储一样),scan 每次去遍历的时候会去遍历其中存储数据的一个...生成循环,永久执行测试 -t 仅运行以逗号分隔的测试命令列表 理解Redis对Lua脚本的操作   1.介绍     1)Redis在2.6推出了脚本功能,允许开发者使用...Lua语言编写脚本传到Redis中执行。

    1.2K20

    js数据结构与算法--散列

    散列,是一种常用的数据存储技术,优势在于可以快速的插入或取出,使用它的数据结构,叫散列表。 它的优势哈,插入、删除、取用数据都很快,但对于查找却效率低下。...在存储的时候,通过散列函数将键映射为一个数字,这个数的范围是0至散列表的长度。 说了半天,有点绕,我都有点晕。先上个图看看, ?...这个就是散列表,书中第88页, 这是一个简单的电话本,把名字d,u,r,r这四个字母的ASCII码加在一起,413(键)。就把散列值和名字Durr(值)对应起来了。...散列函数有时会重复,因为也许会有另外几个字母的ascii值相加也等于413,这就是把二个键映射成一个值了,这就叫碰撞。...另外一个知识点就是,编写散列函数时对数组大小的考虑,一般来讲,数组长度应该是个质数。 /****/ 质数:指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。

    1.2K100

    redis面试题

    Redis(Remote Dictionary Server) Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库...除此之外,Redis 支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。 Redis支持的数据类型? Redis 可以存储键和不同类型的值之间的映射。...键的类型只能为字符串,值常见有五种数据类型:字符串、列表、集合、散列表、有序集合。 String字符串: 格式: set key value string类型是二进制安全的。...意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大能存储512MB。...Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 List(列表) Redis 列表是简单的字符串列表,按照插入顺序排序。

    9310

    Redis常用数据类型与基本命令指北

    ,因此可以使用散列类型存储。...HSET:设置散列中指定字段的值。 HSET key field value HGET:获取散列中指定字段的值。 HGET key field HDEL:删除散列中一个或多个字段。...HLEN key HKEYS:获取散列中所有字段的列表。 HKEYS key HVALS:获取散列中所有值的列表。 HVALS key HGETALL:获取散列中所有字段和值的列表。...HGETALL key HMSET:同时设置散列中多个字段的值。 HMSET key field1 value1 [field2 value2 ...] HMGET:获取散列中多个字段的值。...底层数据结构:双向链表(Linked List)和压缩列表(ZipList)。 以下是一些常用的 Redis 列表类型的命令: LPUSH:将一个或多个值插入到列表的左侧(头部)。

    19810

    Redis HyperLogLog命令操作实例

    Redis HyperLogLog命令 Redis HyperLogLog是一种使用随机化的算法,以少量内存提供集合中唯一元素数量的近似值。...这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。 Redis Lua 脚本 功能强大,可以实现事务,管道等功能。并且读取延时更小。...将Redis当做使用LRU算法的缓存来使用 大量插入数据 分区(Partitioning):如何将你的数据分布在多个Redis里面 分区是将数据拆分为多个Redis实例的过程,因此每个实例只包含一部分键...它允许将计算能力扩展到多个核心和多个计算机,并将网络带宽扩展到多个计算机和网络适配器。 缺点:操作更加复杂 分区类型 Redis中有两种类型的分区。...哈希分区 在这种类型的分区中,使用散列函数(例如,模函数)将键转换成数字,然后将数据存储在不同的Redis实例中。

    68130

    文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题

    简要描述如何为动态开地址散列表设计一个插入算法,使得每个插入操作的摊还代价的期望值为 O(1) 。为什么每个插入操作的实际代价的期望值不必对所有插入操作都是 O(1) ?...当两个或多个键哈希到同一个索引时,就需要使用某种冲突解决策略,如线性探测、二次探测或双重哈希。 为什么装载因子达到一个严格小于 1 的值 a 时就认为表满?...这个阈值通常是根据经验设定的,例如 0.75 或 0.8,以在空间和效率之间找到平衡。 如何为动态开地址散列表设计一个插入算法,使得每个插入操作的摊还代价的期望值为 O(1)?...这样做的目的是为了避免频繁地重新散列和扩展散列表,从而提高性能。 为了设计一个插入算法,使得每个插入操作的摊还代价的期望值为 O(1),我们可以采取以下策略: 1....这是因为在散列表的生命周期中,会有一些插入操作导致散列表扩容和重新散列,这些操作的代价会高于 O(1)。

    15720

    Java数据结构与算法解析(十二)——散列表

    散列表的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。...在理想的情况下,不同的键会被转换为不同的索引值,但是在有些情况下我们需要处理多个键被哈希到同一个索引值的情况。所以散列查找的第二个步骤就是处理碰撞冲突。 2.处理碰撞冲突。...只需要调整哈希函数算法即可在时间和空间上做出取舍。 散列函数和键的类型有关。对于每种类型的键我们都需要一个与之对应的散列函数。 散列函数 1. 正整数 获取正整数散列值最常用的方法是使用除留余数法。...使用拉链法处理碰撞 散列算法的第二步就是碰撞处理,也就是处理两个或多个键的散列值相同的情况。...代码实现 我们使用数组keys保存散列表中的键,数组values保存散列表中的值,两个数组同一位置上的元素共同确定一个散列表中的键值对。

    1.2K10

    【100 种语言速成】第 4 节:Lua

    Lua 是一种来自巴西的小型编程语言,并且是唯一来自巴西并在全球产生重大影响的技术。 Lua 与其他语言的主要区别在于它非常适合嵌入到现有应用程序中,并且在视频游戏中特别受欢迎(这里只是部分列表)。...有一个称为“表”的数据结构,它既可以用作数组/列表,也可以用作字典/散列/对象。...Lua 在复杂类型上没有相等性(JavaScript 共享相同的缺陷),它甚至没有内置的 console.log。 让我们编写自己的检查 编写我们自己的检查并不太难。...过去,编程语言分为基于 0 的索引和基于 1 的索引。Lua 大约是这些时代的最后一个残余,基于 0 的索引已经获胜。...你应该使用Lua吗? 老实说,对于新程序,不是真的,但是如果您对游戏开发感兴趣,仍然值得了解基础知识。它仍然在游戏脚本中占有重要地位。

    43821
    领券