0、Redis

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
相关文章
|
6天前
|
NoSQL 安全 Redis
Redis 安全
10月更文挑战第20天
17 4
|
6月前
|
存储 NoSQL 测试技术
【Redis】redis为什么快
【Redis】redis为什么快
|
6月前
|
存储 NoSQL Redis
Redis介绍以及日常使用
​ 介绍 Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。 Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型
181 1
|
运维 NoSQL Shell
redis(2)
Redis Cluster 是 redis的分布式解决方案,在3.0版本正式推出 当遇到单机、内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡目的。 Redis Cluster之前的分布式方案有两种: 1)客户端分区方案: 优点分区逻辑可控,缺点是需要自己处理数据路由,高可用和故障转移等。 2)代理方案: 优点是简化客户端分布式逻辑和升级维护便利,缺点加重架构部署和性能消耗。 官方提供的 Redis Cluster集群方案,很好的解决了集群方面的问题
|
6月前
|
存储 消息中间件 缓存
redis
Redis是一个开源的内存数据库,它可以用作缓存、消息队列和持久化存储等多种用途。
63 0
|
存储 NoSQL Linux
Redis之Redis为什么这么快解读
Redis之Redis为什么这么快解读
|
存储 消息中间件 NoSQL
什么是Redis?
redis是一个高性能的key-value数据库。
75 0
|
存储 缓存 NoSQL
Redis5
Redis5
119 0
|
NoSQL 关系型数据库 MySQL
Redis1
Redis1
74 0
|
存储 缓存 监控
Redis应用问题解决
key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
Redis应用问题解决