0、Redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 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

参考


相关实践学习
基于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
相关文章
|
9月前
|
存储 NoSQL 关系型数据库
|
8月前
|
缓存 NoSQL 关系型数据库
记一次redis使用问题
记一次redis使用问题
42 0
|
8月前
|
消息中间件 缓存 NoSQL
【Redis】 初识 Redis
【Redis】 初识 Redis
|
存储 NoSQL Java
Redis3
Redis3
65 0
|
9月前
|
存储 人工智能 NoSQL
Redis的未来
【翻译】来自redis官网对未来的规划
280 0
|
9月前
|
存储 NoSQL Go
Redis 双端链表
Redis 双端链表
55 0
|
缓存 NoSQL 关系型数据库
|
缓存 NoSQL 关系型数据库
redis-1
redis-1
69 1
|
存储 NoSQL Linux
Redis之Redis为什么这么快解读
Redis之Redis为什么这么快解读
|
存储 消息中间件 NoSQL
什么是Redis?
redis是一个高性能的key-value数据库。
94 0