点击排行榜scoreboard

项目概述 项目地址:https://github.com/sirius2alpha/scoreboard 使用Redis在服务器上对用户的点击数排序,并返回点击次数排行榜。 技术栈 整体设计 用户界面 排行榜展示区: 显示当前排行榜的状态。 点击按钮: 用户点击来增加他们的计分。 昵称输入和提交: 允许新用户输入昵称并参与排行榜。 实时更新监听: 不需要用户交互,自动更新排行榜。 WebSocket客户端逻辑 建立连接: 当用户访问网站时,建立WebSocket连接。 发送点击事件: 当用户点击按钮时,发送消息到服务器。 接收排行榜更新: 监听来自服务器的排行榜更新,并更新界面。 用户注册: 发送新用户的昵称到服务器。 处理断开连接: 如果用户20秒未操作,发送断开消息到服务器。 后端设计(Gin + Redis) WebSocket服务器 处理WebSocket连接: 接受和管理WebSocket连接。 接收消息: 解析从客户端接收到的消息(点击事件,新用户注册)。 Redis交互: 更新用户的分数并重新排序排行榜。 广播排行榜更新: 将更新后的排行榜发送给所有连接的客户端。 处理断开: 移除30秒未操作的用户。 Redis逻辑 用户分数管理: 存储和更新用户分数。 排行榜排序: 实时更新排行榜。 数据持久化: 保证数据在服务重启后仍然可用。 API设计 本项目API设计采用的是websocket实现。 由于考虑到用户在点击比较频繁,如果采用HTTP会造成头部开销较大,而websocket的头部开销会相对小一些。 消息类型 UserClick: { type: “UserClick”, nickname: “用户昵称” } NewUser: { type: “NewUser”, nickname: “用户昵称” } UserInactive: { type: “UserInactive”, nickname: “用户昵称” }...

January 21, 2024 · 2 min · 287 words · sirius1y

在docker中安装redis

常规步骤:安装vim openssh,生成密钥 sudo apt-get update sudo apt-get install vim openssh-server cd .ssh ssh-keygen -t rsa -C "sirius1y@outlook.com" cat id_rsa.pub > authorized_keys ssh localhost exit rm known_hosts 安装docker 设置 Docker 的apt存储库 官网教程:https://docs.docker.com/desktop/install/ubuntu/ # Add Docker's official GPG key: sudo apt-get update # 安装证书、下载工具、证书验证工具 sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 证书对所有人都可读 sudo chmod a+r /etc/apt/keyrings/docker.gpg # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker....

January 4, 2024 · 3 min · 583 words · sirius1y

Redis常用指令

快速了解Redis Redis是什么?为什么要使用Redis?他有什么好处和优势?他的弊端又有哪些呢?他的基本模型和技术有哪些? Redis是什么? Redis(Remote Dictionary Server)是一种开源的内存数据存储系统,它可以用作数据库、缓存和消息代理。它被设计用于快速访问、存储和分析数据,以及支持各种数据结构,如字符串、哈希表、列表、集合、有序集合等。Redis支持持久化,可以将数据保存在磁盘上,以便在重启后恢复数据。 为什么要使用Redis? Redis有许多优点,使其成为广泛使用的数据存储和缓存解决方案: 优势 快速访问: Redis数据存储在内存中,因此具有非常快速的读写性能,适合用作缓存层,加速数据访问。 丰富的数据结构: Redis不仅支持简单的键值存储,还支持多种数据结构,如列表、集合、有序集合等,这使得它适用于更多不同类型的应用场景。 持久化: Redis支持数据的持久化,可以将数据保存在磁盘上,以便在服务器重启后恢复数据。 分布式架构: Redis支持分布式集群,可以将数据分散在多个节点上,提高数据的可用性和性能。 发布/订阅: Redis具有消息代理功能,可以用于发布和订阅消息,支持实时数据推送和通知。 事务支持: Redis支持事务,允许一系列操作以原子方式执行,保证数据的一致性。 弊端 内存消耗: Redis的数据存储在内存中,因此对于大规模数据集可能会占用大量内存。尽管有持久化选项,但内存仍然是其主要的存储介质。 单线程: Redis在单个进程中使用单线程处理所有的命令请求。这在某些高并发情况下可能成为性能瓶颈。 基本模型和技术 键值存储: Redis的基本模型是键值存储,您可以使用键来检索存储在Redis中的数据。 数据结构: Redis支持字符串、哈希表、列表、集合、有序集合等多种数据结构,使其非常灵活。 持久化: Redis支持两种持久化方式,分别是快照(snapshotting)和日志(append-only file)。 发布/订阅: Redis支持发布/订阅模式,允许客户端订阅特定的频道并接收实时消息。 分布式: Redis可以通过分片或复制来构建分布式架构,提高可用性和扩展性。 Redis vs. MySQL 性能比较 读写性能: Redis在内存中存储数据,因此具有非常快速的读写性能,尤其适合高并发读取和写入场景。与此相比,MySQL可能受到磁盘IO和索引的影响,其读写性能相对较低。 数据结构: Redis支持多种数据结构,使其适合用于更复杂的数据模型,如实时计数、排行榜、分布式锁等。MySQL虽然也支持多种数据类型,但通常用于结构化数据的存储。 缓存: Redis非常适合用作缓存层,可以减轻数据库的负载,提高数据访问速度。MySQL也可以用作缓存,但Redis的读取速度更快。 事务和持久化: Redis支持事务,但它的事务模型不如MySQL严格。MySQL提供强大的事务支持和多种持久化选项。 适用领域和场景 Redis适合场景 实时数据:例如实时计数、统计信息和分析。 缓存:用作高速缓存,提高数据访问速度。 实时消息:发布/订阅模式用于实时消息传递。 会话存储:存储用户会话数据,适用于分布式系统。 分布式锁:实现分布式锁以协调多个系统的并发操作。 MySQL适合场景 结构化数据:适用于关系型、事务性的结构化数据。 复杂查询:支持复杂的查询和连接操作。 大规模数据存储:适合大规模数据存储和管理。 强大事务:需要强大的事务支持和ACID特性。 Redis和MySQL有各自独特的优势和用途,它们并不是直接替代关系。Redis可以在某些情况下用来增强项目性能,或者作为辅助数据库来存储特定类型的数据,例如缓存、会话、排行榜等。然而,对于需要复杂查询、关联性和事务的应用,Redis并不是MySQL的替代品。对于大部分应用,两者可以共同使用,以发挥各自的优势,构建更高效的系统。 Redis基本命令 现在很多大公司的后端服务都是基础存储服务+Redis缓存的形式,使用Redis进行缓存很大程度上提高了服务的效率,当然也存在缓存穿透、缓存雪崩的问题,但是在此之前还是要从Redis的基础命令开始学习掌握,所以在这里整理了Redis常用的命令。 字符串 在Redis中,字符串可以存储以下3中类型的值:字节串(byte string),整数,浮点数。 自增自减命令 INCR key-name:将键存储的值加上1...

August 3, 2023 · 2 min · 309 words · sirius1y