从Manual手册中获得全局掌控感
1. 连接层
2. 服务层
3. 引擎层
4. 存储层 数据存储层, 主要是将数据存储在文件系统之上,并完成与存储引擎的交互。 和其他数据库相比,MySQL存储引擎是插件式的存储引擎架构。将 查询处理和其他的系统任务以及数据的存储提取分离。这种架构可 以根据业务的需求和实际需要选择合适的存储引擎。 1.2 存储引擎介绍 1. 概述 针对不同的存储需求可以选择最优的存储引擎。存储引擎就是存 储数据,建立索引,更新查询数据等等技术的实现方式 。存储引 擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类 型。
2. 查看MySQL存储引擎 那后续的删除key操作就没法执行,这个key会一直在redis中存在,其他服务器每次去检查,都会返回0,他们都会认为有人在使用锁,我需要等。 为了解决这个死锁的问题,我们就就需要给key 设置有效期了。 设置的方式有2种 1,第一种就是在set完key之后,直接设置key的有效期 "expire key timeout" ,为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。 这种方式相当于,把锁持有的有效期,交给了redis去控制。如果时间到了,你还没有给我删除key,那redis就直接给你删了,其他服务器就可以继续去setnx获取锁。 2,第二种方式,就是把删除key权利交给其他的服务器,那这个时候就需要用到value值了, 比如服务器1,设置了value 也就是 timeout 为 当前时间+1 秒 ,这个时候服务器2 通过get 发现时间已经超过系统当前时间了,那就说明服务器1没有释放锁,服务器1可能出问题了, 服务器2就开始执行删除key操作,并且继续执行setnx 操作。 但是这块有一个问题,也就是,不光你服务器2可能会发现服务器1超时了,服务器3也可能会发现,如果刚好,服务器2,setnx操作完成,服务器3就接着删除,是不是服务器3也可以setnx成功了? 那就等于是服务器2和服务器3都拿到锁了,那就问题大了。这个时候怎么办呢? 这个时候需要用到 “GETSET key value” 命令了。这个命令的意思就是获取当前key的值,并且设置新的值。
假设服务器2发现key过期了,开始调用 getset 命令,然后用获取的时间判断是否过期,如果获取的时间仍然是过期的,那就说明拿到锁了。 (编辑:新余站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |