0%

许多单体应用在修改应用状态时都是依靠事务来保证一致性和隔离性的。要实现这两点很简单:应用通常只和单个数据库交互,使用支持启动、提交和回滚这些事务操作的框架来实现强一致性保证。

在微服务应用中,就没有这么幸运了。服务间的交互可能会失败,导致业务流程受阻,最终使整个系统处于不一致的状态。

阅读全文 »

1. 多线程

我们所说的Redis单线程,指的是”其网络IO和键值对读写是由一个线程完成的”,也就是说,Redis中只有网络请求模块和数据操作模块是单线程的。而其他的如持久化存储模块、集群支撑模块等是多线程的。

阅读全文 »

1. 缓存问题

1.1 缓存穿透(透了要用布隆过滤器)

缓存和数据库中都没有的数据,而用户不断发起请求。由于缓存不命中,并且出于容错考虑,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,失去了缓存的意义。

如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

阅读全文 »

1. 事务

Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。准确的讲,Redis 事务包含两种模式 : 事务模式 和 Lua 脚本。

阅读全文 »

1. 主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);从服务器无法进行写操作。

img
阅读全文 »

1. 过期删除策略

1.1 过期删除策略(3种)

  • 定时删除(对内存友好,对CPU不友好)

    到时间点上就把所有过期的键删除了。

  • 惰性删除(对CPU极度友好,对内存极度不友好)

    每次从键空间取键的时候,判断一下该键是否过期了,如果过期了就删除。

  • 定期删除(折中)

    每隔一段时间去删除过期键,限制删除的执行时长和频率。

第一种和第三种为主动删除策略,而第二种则为被动删除策略。Redis采用的是惰性删除+定期删除两种策略,所以说,在Redis里边如果过期键到了过期的时间了,未必被立马删除的!

阅读全文 »

1. 基础对象

Redis中的key一定是字符串,value可以是string、list、hash、set、sortset这几种常用的。

类型作用底层数据结构
string简单的key-valueSDS
list有序列表,可做简单队列ziplist, linkedlist 【quicklist】
hash哈希表,存储结构化数据ziplist, hashtable
set无序列表(去重),提供一系列的交集、并集、差集的命令intset, hashtable
sortset有序集合映射,排行榜,和时间相关的排序ziplist, zskiplist
阅读全文 »

1. http basic认证

HttpBasic认证是Http自带的认证方式,这种认证方式通常表现为浏览器弹出Alert窗口提示输入用户名/密码。

阅读全文 »

大多数编程语言都是基于二值逻辑的,即逻辑真值只有真和假两个。而 SQL 语言则采用一种特别的 逻辑体系——三值逻辑,即逻辑真值除了真和假,还有第三个值“不确定”。三值逻辑经常会带来一些意想不到的情况,这让程序员很是烦恼。

阅读全文 »