Redis笔记 | 青训营

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis笔记 | 青训营

简介

Redis(Remote Dictionary Server)是一个快速、开源、内存数据存储系统,可用作数据库、缓存和消息中间件。它支持多种数据结构,适用于多种应用场景。

为什么需要Redis

  • 数据从单表,演进出了分库分表
  • MySQL从单机演进出了集群
  • 数据量增长
  • 读写数据压力的不断增加
  • 数据分冷热
  • 热数据:经常被访问到的数据
  • 冷数据:不经常被访问到的数据
  • 将热数据存储到内存中

区别于其他 key-value 存储

  • 复杂数据结构:提供复杂的数据结构和对应的原子性操作。
  • 内存与持久化:运行在内存中,但可以持久化到磁盘。
  • 简单操作:在内存中操作简单,磁盘格式紧凑,追加写入方式。

适用场景

  • 缓存:提高数据访问速度,减轻数据库压力。
  • 实时统计:用于计数、排名等实时统计场景。
  • 会话存储:用于跨多台服务器的状态共享。
  • 排行榜:通过有序集合实现游戏中的玩家排名。
  • 任务队列:使用列表结构实现异步任务处理。
  • 地理位置存储:存储和查询位置信息。

基本概念

  • 键值存储: Redis 是键值存储系统,每个值可以是字符串、哈希、列表、集合、有序集合等。
  • 内存存储: 数据存储在内存中,因此读写操作快速,但数据会在适当时候持久化到磁盘。
  • 数据结构: Redis 提供字符串、哈希、列表、集合、有序集合等多种数据结构。
  • 持久化: Redis 支持将数据持久化到磁盘,以便在重启后恢复数据。
  • 发布-订阅模式: Redis 支持发布消息和订阅消息,用于实现实时消息传递。

常用命令示例

字符串操作

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

redis

复制代码

SET username "john"
GET username

哈希操作

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

redis

复制代码

HSET user:1 name "Alice"
HSET user:1 age 25
HGETALL user:1

列表操作

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

redis

复制代码

RPUSH tasks "task1"
RPUSH tasks "task2"
LRANGE tasks 0 -1

集合操作

Redis 的 Set 是 string 类型的无序集合。

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

  • sadd 命令 添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。

redis

复制代码

SADD tags "tag1"
SADD tags "tag2"
SMEMBERS tags

有序集合操作

  • zadd 命令 添加元素到集合,元素在集合中存在则更新对应score

redis

复制代码

ZADD scores 100 "player1"
ZADD scores 200 "player2"
ZREVRANGE scores 0 -1 WITHSCORES

原子性操作

Redis 所有操作都是原子性的,意味着每个操作要么完全执行成功,要么完全不执行,保证了数据的一致性和可靠性。此外,Redis 还支持事务操作,即将多个操作封装成一个事务,在 EXEC 指令时一次性执行,保证了多个操作的原子性。

丰富的特性

Redis 还提供了许多其他特性,包括:

  • 发布-订阅模式:支持消息的发布和订阅,用于实现实时消息传递。

redis

  • 复制代码
SUBSCRIBE channel-name
PUBLISH channel-name "Hello, Redis!"
  • 通知:支持键的事件通知,如键过期、删除等。
  • 过期键:可以设置键在一定时间后自动过期,从而释放内存空间。

总结

Redis 是一个多功能的内存数据存储系统,适用于多种应用场景。了解基本概念和常用命令,可以在你的项目中充分利用 Redis 的优势,提高应用性能和灵活性。

在GO中使用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
相关文章
|
6天前
|
canal 缓存 NoSQL
【Redis系列笔记】双写一致性
本文讨论了缓存不一致问题及其后果,如价格显示错误和订单计算错误。问题主要源于并发和双写操作的异常。解决方案包括使用分布式锁(但可能导致性能下降和复杂性增加)、延迟双删策略(通过延迟删除缓存来等待数据同步)以及异步同步方法,如通过Canal和MQ实现数据的最终一致性。面试中,可以提及这些策略来确保数据库和缓存数据的一致性。
94 1
【Redis系列笔记】双写一致性
|
6天前
|
缓存 NoSQL 安全
【Redis系列笔记】缓存三剑客
缓存穿透是指请求一个不存在的数据,缓存层和数据库层都没有这个数据,这种请求会穿透缓存直接到数据库进行查询。它通常发生在一些恶意用户可能故意发起不存在的请求,试图让系统陷入这种情况,以耗尽数据库连接资源或者造成性能问题。 缓存击穿发生在访问热点数据,大量请求访问同一个热点数据,当热点数据失效后同时去请求数据库,瞬间耗尽数据库资源,导致数据库无法使用。 缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。
46 1
|
6天前
|
存储 缓存 NoSQL
蚂蚁金服P7私藏的Redis原理与实践内部笔记
Redis 是完全开源免费的,是一个高性能的key-value类型的内存数据库。整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
63 1
|
6天前
|
NoSQL Redis
Redis原理之网络通信协议笔记
1. RESP协议 ​2. 自定义Socket连接Redis
|
6天前
|
NoSQL Linux Redis
Redis原理之网络模型笔记
Redis采用单线程模型,这意味着一个Redis服务器在任何时刻都只会处理一个请求。Redis的网络模型涉及到阻塞I/O(Blocking I/O)、非阻塞I/O(Non-blocking I/O)、I/O多路复用(I/O Multiplexing)、信号驱动I/O(Signal-driven I/O)以及异步I/O(Asynchronous I/O)。
|
6天前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
135 2
|
6天前
|
存储 NoSQL Redis
【Redis系列笔记】Redis总结
Redis是一个基于内存的 key-value 结构数据库。 Redis 是互联网技术领域使用最为广泛的存储中间件。 Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。 它存储的value类型比较丰富,也被称为结构化的NoSql数据库。
68 0
|
6天前
|
缓存 NoSQL Java
【Redis系列笔记】Redis入门
本文介绍了Redis常用命令,以及SpringBoot集成Spring Data Redis和Spring Cache。Spring Data Redis 提供了对 Redis 的操作方法,而 Spring Cache 则提供了基于注解的缓存功能,可以方便地将方法的返回值缓存到 Redis 中,以提高性能和减少对数据源的访问次数。这样的集成可以帮助开发者更便捷地利用 Redis 来管理应用程序的数据和缓存。
99 4
|
6天前
|
缓存 NoSQL Java
【Redis系列笔记】Redis事务
Redis事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。
75 3
|
6天前
|
缓存 NoSQL 算法
【Redis系列笔记】内存淘汰及过期删除
Redis是一个内存键值对数据库,所以对于内存的管理尤为重要。Redis内部对于内存的管理主要包含两个方向,过期删除策略和数据淘汰策略。内存淘汰策略指在Redis内存使用达到一定阈值的时候,执行某种策略释放内存空间,以便于接收新的数据。数据过期删除策略是指在数据的有效时间到期后,如何从内存中删除这些数据的规则。
49 0