缓存雪崩 由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。 解决方法: 随机的缓存过期时间 给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存 1、缓存标 … 继续阅读
分类目录归档:数据库/NoSQL技术
Redis RPush 命令
今天帮订单组那边,设计一个基于redis的消息系统,和架构师聊的时候,他建议了我使用RPush命令。RPush命令的返回结果是,操作之后列表的长度,这个在某些场合有一些特殊妙用。于是整理个文章来记录RPush命令 Redis Rpush 命令 Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。 如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列 … 继续阅读
show processlist查看正在执行的SQL语句
最近遇到MySQL 报警,cpu突然飙高的情况,上去想看看是什么原因,运维找了过来。这个过程接触了 show processlist,于是整理和记录一下。 MySQL使用show processlist查看正在执行的SQL语句,通过show processlist查看正在执行的sql的情况以及及时kill死锁的SQL,通过EXPLAIN分析需要优化的sql语句。 命令行登录MySQL mysql … 继续阅读
Redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 我的理解是,除了String意外,其他数据类型本质上都是容器,对这些数据类型的操作,就是对这些数据类型的读写,对其进行CRUD。 String string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 ke … 继续阅读
Redis协议(RESP)
通信协议(protocol) Redis 协议在以下三个目标之间进行折中: * 易于实现 * 可以高效地被计算机分析(parse) * 可以很容易地被人类读懂 网络层 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾。 请求 Redis 服务器接受命令以及命令的参数。服务器会在接到命令之后,对命令进 … 继续阅读
MySQL行锁和表锁
MySQL储存引擎 MyISAM不支持事务,InnoDB支持事务。 只有InnoDB支持行锁,三个存储引擎都支持表锁。只有BDB支持页锁。 存储引擎 行锁 表锁 页锁 InnnoDB 支持 支持 不支持 MyISAM 不支持 支持 不支持 BDB 不支持 支持 支持 MySQL行锁 总结:InnoDB的行锁是针对索引加的锁,不是针对记录加的锁。并且该索引不能失效,否则都会从行锁升级为表锁。 行锁的 … 继续阅读