redis存储什么类型的数据?redis分布式锁怎么实现的?

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: redis存储什么类型的数据?redis分布式锁怎么实现的?

Redis 存储的数据类型

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、基于内存、可选持久性的键值对存储数据库。Redis 支持多种类型的数据结构,以下是主要的数据类型:

「字符串(String)」

字符串是 Redis 最基本的数据类型,一个键最多能存储 512MB。

「列表(List)」

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

「集合(Set)」

集合是字符串的无序集合。它是通过哈希表实现的,所以添加、删除、查找的复杂度都是 O(1)。

「有序集合(Sorted Set)」

有序集合和集合一样也是字符串集合,不同的是每个元素都会关联一个浮点数分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。

「哈希(Hash)」

哈希是一个键值对集合。它是一个字符串字段和字符串值之间的映射表,所以它适合用于存储对象。

「位图(Bitmap)」

位图本质上是字符串,但是可以对字符串的位进行操作,每个位上的值只能是 0 或 1。

「HyperLogLog」

这是一种概率性数据结构,用来做基数统计的算法。

「地理空间(Geo)」

Redis 提供了地理空间索引功能,可以存储地理位置信息,并进行半径查询和定位。

Redis 分布式锁的实现

Redis 分布式锁主要是利用了 Redis 的原子性操作来实现的。最常见的实现方式是使用 SETNX 命令(SET if Not eXists),这个命令只有在键不存在时才会设置键值。

「基本实现步骤」

  1. 「加锁」 使用 SETNX 设置一个锁键,值可以是一个唯一标识(如 UUID),这样可以避免锁被其他进程释放。
  2. 「设置超时时间」 为了避免死锁的情况,需要为锁设置一个超时时间,可以使用 EXPIRE 命令来实现。
  3. 「释放锁」 当任务执行完成后,通过发送 DEL 命令来释放锁。为了确保锁的安全性,需要先检查锁的值是否是设置时的唯一标识,只有匹配时才执行删除操作。

「改进的实现」

在 Redis 2.6.12 版本之后,可以使用 SET 命令的 NXPX 参数来原子性地设置锁键和超时时间,这样可以减少网络通信次数,提高效率。

SET lock_key unique_value NX PX 30000

这条命令会尝试设置一个名为 lock_key 的锁,值为 unique_value,只有当锁不存在时才会设置成功,并且锁会在 30000 毫秒后自动释放。

「安全性考虑」

为了确保分布式锁的安全性,需要确保以下几点:

  • 锁必须是互斥的,同一时间只有一个客户端能持有锁。
  • 不要使用 SETNXEXPIRE 的组合来设置锁,因为这两个操作不是原子的。
  • 解锁时必须确保是锁的持有者才能解锁,可以通过 Lua 脚本来原子性地检查和删除锁。
  • 设置合理的锁超时时间,防止因为某些原因导致锁没有被释放。

通过以上的方法,可以在 Redis 中实现一个简单但是相对安全的分布式锁。

相关文章
|
3月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
321 2
|
3月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
254 6
|
4月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
1月前
|
存储 监控 算法
117_LLM训练的高效分布式策略:从数据并行到ZeRO优化
在2025年,大型语言模型(LLM)的规模已经达到了数千亿甚至数万亿参数,训练这样的庞然大物需要先进的分布式训练技术支持。本文将深入探讨LLM训练中的高效分布式策略,从基础的数据并行到最先进的ZeRO优化技术,为读者提供全面且实用的技术指南。
|
2月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
206 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
2月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
NoSQL Redis 数据库
用redis实现分布式锁时容易踩的5个坑
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 近有不少小伙伴投入短视频赛道,也出现不少第三方数据商,为大家提供抖音爬虫数据。 小伙伴们有没有好奇过,这些数据是如何获取的,普通技术小白能否也拥有自己的抖音爬虫呢? 本文会全面解密抖音爬虫的幕后原理,不需要任何编程知识,还请耐心阅读。
用redis实现分布式锁时容易踩的5个坑
|
NoSQL Java 关系型数据库
浅谈Redis实现分布式锁
浅谈Redis实现分布式锁
|
存储 canal 缓存
|
NoSQL PHP Redis
redis实现分布式锁
redis实现分布式锁
301 0
redis实现分布式锁

热门文章

最新文章