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 中实现一个简单但是相对安全的分布式锁。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
17天前
|
缓存 NoSQL 关系型数据库
13- Redis和Mysql如何保证数据⼀致?
该内容讨论了保证Redis和MySQL数据一致性的几种策略。首先提到的两种方法存在不一致风险:先更新MySQL再更新Redis,或先删Redis再更新MySQL。第三种方案是通过MQ异步同步以达到最终一致性,适用于一致性要求较高的场景。项目中根据不同业务需求选择不同方案,如对一致性要求不高的情况不做处理,时效性数据设置过期时间,高一致性需求则使用MQ确保同步,最严格的情况可能涉及分布式事务(如Seata的TCC模式)。
44 6
|
17天前
|
NoSQL Redis
05- Redis的数据淘汰策略有哪些 ?
Redis 提供了 8 种数据淘汰策略:挥发性 LRU、LFU 和 TTL(针对有过期时间的数据),挥发性随机淘汰,以及全库的 LRU、LFU 随机淘汰,用于在内存不足时选择删除。另外,还有不淘汰策略(no-eviction),允许新写入操作报错而非删除数据。
215 1
|
17天前
|
XML JSON NoSQL
Redis的常用数据结构之字符串类型
Redis的常用数据结构之字符串类型
19 0
|
19天前
|
存储 缓存 NoSQL
深入解析Redis:一种快速、高效的键值存储系统
**Redis** 是一款高性能的键值存储系统,以其内存数据、高效数据结构、持久化机制和丰富的功能在现代应用中占有一席之地。支持字符串、哈希、列表、集合和有序集合等多种数据结构,适用于缓存、计数、分布式锁和消息队列等场景。安装Redis涉及下载、编译和配置`redis.conf`。基本操作包括键值对的设置与获取,以及哈希、列表、集合和有序集合的操作。高级特性涵盖发布/订阅、事务处理和Lua脚本。优化策略包括选择合适数据结构、配置缓存和使用Pipeline。注意安全、监控和备份策略,以确保系统稳定和数据安全。
238 1
|
29天前
|
消息中间件 算法 Java
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
187 0
|
24天前
|
NoSQL Redis
Redis事务:保证数据操作的一致性和可靠性
Redis事务:保证数据操作的一致性和可靠性
|
1月前
|
NoSQL Java Redis
如何通俗易懂的理解Redis分布式锁
在多线程并发的情况下,我们如何保证一个代码块在同一时间只能由一个线程访问呢?
38 2
|
29天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
47 0
|
1天前
|
存储 NoSQL Java
基于Redis实现分布式锁
基于Redis实现分布式锁
8 0
|
2天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战

热门文章

最新文章