LeeQingShui's Blog

  • 标签

  • 分类

  • 归档

  • 关于

(*)Redis 实战应用之分布式 Session 共享

发表于 2019-04-20 | 更新于 2025-11-10 | 分类于 NoSQL
本文字数: 2k | 阅读时长 ≈ 3 分钟

前言

  在传统的单体应用中,所有用户请求都由同一台服务器处理,会话(Session)信息通常保存在服务器内存中即可。
  客户端第一次登录后,服务端会创建一个 Session 并生成 SessionId,保存在服务端内存中,同时将 SessionId 通过 Cookie 返回给客户端。之后客户端的每次请求都会携带该 SessionId,服务端即可识别用户的登录状态。

  然而,随着业务规模扩大和访问量增加,单台服务器已无法承受高并发请求,我们往往会采用 Nginx + 多台应用服务器 的负载均衡方式进行水平扩展。
  此时,Session 共享问题便随之出现。

阅读全文 »

(*)Redis 实战应用之验证码

发表于 2019-04-18 | 更新于 2023-07-23 | 分类于 NoSQL
本文字数: 982 | 阅读时长 ≈ 1 分钟

序言

  随着技术的不断发展,为了使用户拥有更好的体验,许多网站在登陆界面额外提供了使用手机验证码的登陆方式。
  该功能基本使用 Redis 数据库实现,不仅能提高效率,还可以减少维护量。
  下面我们通过一个简单的例子来了解一下 Redis 是怎么实现这种功能的。

阅读全文 »

(六)Redis 哨兵机制

发表于 2019-04-15 | 更新于 2026-08-28 | 分类于 NoSQL
本文字数: 10k | 阅读时长 ≈ 15 分钟

序言

  当主机宕机后出现故障后无法及时恢复,可以在从机执行slave no one命令使其上位变为主机,但是,这样的人工操作带来一个问题,难道半夜主机宕机还要通知运维起来输命令吗?
  这显然不符合常理,为了自动化管理这个过程,Redis 引入了哨兵机制。

阅读全文 »

(五)Redis 主从复制

发表于 2019-04-14 | 更新于 2026-08-28 | 分类于 NoSQL
本文字数: 8.1k | 阅读时长 ≈ 12 分钟

前言

  虽然 Redis 的性能非常优秀,能快速处理请求,但它有时也会衰老为步履蹒跚的老人,比如面对以下情况:

  • ① 存储过多元素: 若涉及的元素达到上万个甚至上百万个时,命令执行耗时可能需要以秒来进行计算
  • ② 单机性能瓶颈:即使一个命令只需要花费 10 ms 就能完成,单个 Redis 实例 1s 也只能处理 100 个命令

  试问谁不想拥有青春永驻,充满活力呢?
  Redis 也妄想如此,但可惜的是它只是一项技术工具,无法自适应极端场景。不过没关系,程序员作为投骰子的那个人,完全可以将其扩展,为这头猛虎安上翅膀。

  面对情况 ①,可能是业务场景数据结构使用的不合理,可视具体代码考虑优化,本文不做详细讨论。
  面对情况 ②,是否可以将单台 Redis 实例增加为多台,将第一台 Redis 实例中的数据复制到其他实例中呢?
  Redis 本身考虑到了第 ② 点,因此实现了一个功能——主从复制。

阅读全文 »

(四)Redis 持久化

发表于 2019-04-13 | 更新于 2026-08-28 | 分类于 NoSQL
本文字数: 8.6k | 阅读时长 ≈ 12 分钟

前言

  由于 Redis 是内存数据库,因此会将自己的数据库状态存储在内存当中,但是,一旦服务器进程出现意外退出了,若不想办法将存储在内存中的数据库状态保存到磁盘中,则服务器中的数据库状态也会消失不见。
  为了避免数据的意外丢失,需要将内存中的数据库状态保存到磁盘中。
  为此,Redis 提供了持久化技术以达到该目的。

  在 Redis 中,持久化拥有以下三种方式:

  • RDB(Redis DataBase):快照方式,将某一个时刻的内存数据,以二进制的方式写入磁盘;
  • AOF(Append Only File):文件追加方式,记录所有的操作命令,并以文本的形式追加到文件中;
  • 混合持久化方式:Redis 4.0 之后新增的方式,其结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,既能保证 Redis 重启时的速度,又能减低数据丢失的风险。

  下面,就跟随本文来了解一下这三种方式吧!

阅读全文 »

(三)Redis 事务

发表于 2019-04-12 | 更新于 2026-08-27 | 分类于 NoSQL
本文字数: 4.2k | 阅读时长 ≈ 6 分钟

序言

  对于数据库事务而言,通常包含了一个序列的对数据库的读/写操作,其主要作用有两个:

  • ① 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
  • ② 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰

  当事务被提交给了数据库管理系统(DBMS),则 DBMS 需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,若事务中有的操作没有成功完成,则事务中的所有操作都需要回滚),回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。

  数据库的事务是通过 DBMS 完成处理的,那么,对于 Redis 而言,又是如何保证事务的呢?Redis 事务是真事务还是伪事务?

阅读全文 »

(二)Redis 事件

发表于 2019-04-11 | 更新于 2022-12-28 | 分类于 NoSQL
本文字数: 3.2k | 阅读时长 ≈ 5 分钟

序言

  Redis 服务器是一个事件驱动程序,服务器需要处理以下两类事件:

  • 文件事件:Redis 服务器通过套接字(Socket)与客户端 (或其他 Redis 服务器)进行连接,文件事件就是服务器对套接字操作的抽象。服务器与客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。
  • 时间事件:Redis 服务器中的一些操作需要在给定的时间点执行,而时间事件就是服务器低这类定时操作的抽象。
阅读全文 »

(一)初识 Redis

发表于 2019-04-10 | 更新于 2024-02-08 | 分类于 NoSQL
本文字数: 12k | 阅读时长 ≈ 17 分钟

简介

  官方文档:Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

  翻译:Redis 是 一个开源(BSD 许可),内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的地理空间索引。

  Redis 具有内置复制,Lua 脚本,LRU 回收,事务和不同级别的磁盘持久性,同时通过 Redis Sentinel 提供高可用性,通过 Redis Cluster 提供自动分区。

阅读全文 »

NoSQL 入门介绍

发表于 2019-04-09 | 更新于 2022-12-28 | 分类于 NoSQL
本文字数: 2k | 阅读时长 ≈ 3 分钟

序言

  对互联网中的数据而言,一般都会存储在关系型数据库中,将数据解耦排列的整整齐齐,看着会很舒服,但若碰上了海量的并发数据,程序又没处理好,用户用起来可能就不太舒服了,用户不舒服老板就不舒服,这个时候就要拿程序员祭天了——产品没优化好今天不准下班!
  关系型数据库为什么不太适合处理海量的并发数据呢?这是因为它存在了一些限制:

  • 性能瓶颈:磁盘 IO 性能低下——数据查询相对较慢
  • 扩展瓶颈:数据关系复杂,扩展性差——不便于大规模集群

  那么,我们可能预期希望有一个东西能解决这些问题:

  • 降低磁盘 IO 次数,越低越好——用内存存储
  • 去除数据间关系,越简单越好——特殊的数据结构适配数据

  这个东西就是 NoSQL 了。

阅读全文 »

会话跟踪技术

发表于 2019-04-08 | 更新于 2022-10-21 | 分类于 信息安全
本文字数: 7.7k | 阅读时长 ≈ 11 分钟

序言

  HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求管理,服务器不知道用户上一次做了什么,这严重阻碍了交互式 Web 应用程序的实现。
  在典型的网上购物场景中,用户浏览了几个页面买了件衣服。最后结帐时,由于 HTTP 的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么,
  不可否认,无状态协议有它的优点,由于不必保存状态,自然可以减少服务器的压力。
  但是,用户该如何在网站上购物呢?总不可能辛辛苦苦挑了件衣服给前台小姐姐(第一次请求),出去接个电话的功夫回来后准备结账(第二次请求),可前台小姐姐却说:小哥哥你谁啊?
  为此,引入了会话跟踪技术。

阅读全文 »

1…8910…15
LeeQingShui

LeeQingShui

149 日志
16 分类
69 标签
RSS
© 2018 – 2026 LeeQingShui | 站点总字数: 899k
赣 ICP 备 2022002212 号
本站已运行
本站总访问量 次 | 本站访客 人次
0%