0、Redis

简介: 0、Redis

golang-guide/Redis/面经/Redis.md at main · mao888/golang-guide (github.com)

简介

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

参考


相关文章
|
7月前
|
人工智能 算法 搜索推荐
《深度剖析:Java ZGC 如何重塑 TB 级实时 AI 数据处理格局》
ZGC(Z Garbage Collector)是一款专为大规模实时数据处理设计的革命性垃圾回收器,特别适用于TB级AI数据场景。传统垃圾回收器因“Stop-The-World”暂停和大内存处理效率低等问题,难以满足实时AI对低延迟和高效内存管理的需求。而ZGC通过并发标记与重分配技术,将停顿时间控制在10毫秒以内,并支持从几十GB到数TB的超大堆内存,极大提升了系统流畅性和性能。其基于Region的内存管理策略及多线程并行处理能力,可灵活应对不同生命周期对象和多任务需求。实际案例表明,ZGC显著优化了实时推荐系统和基因数据分析等任务的效率与准确性。
163 6
《深度剖析:Java ZGC 如何重塑 TB 级实时 AI 数据处理格局》
|
Python
python 用pip安装mediapipe(超简单的一句话)
python 用pip安装mediapipe(超简单的一句话)
2583 0
|
应用服务中间件 nginx 容器
ftp+nginx实现文件服务器
为什么要有文件服务器呢,如果把文件存放到web容器下肯定不是好的办法,因为你时刻需要注意覆盖后文件消失的问题。如果想完全的搬出web容器,项目不大的话我们可以选择ftp+nginx的方式来实现文件服务器。
2537 0
|
JavaScript 前端开发 Web App开发
|
3天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1307 3
|
3天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
629 3
|
4天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
10天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
742 5