redis 通信协议 协议是通信计算机双方必须共同遵从的一组约定。 协议规定了:怎么样建立连接、怎么样互相识别等。 只有遵守这个约定,计算机之间才能相互通信交流。 对于 redis 而言,为了保证服务器与客户端的正常通信,也定义了自己的通信协议,客户端和服务器在接收解析数据时都需要遵循这个协议才能保证通信正常进行。 redis 请求协议的一般形式 *<参数数量> CR LF $< … 继续阅读
标签归档:redis
分布式锁以及基于Redis的实现
使用场景 在某些场景中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的。 分布式锁需满足四个条件 分布式锁需满足四个条件 为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 解铃还须系铃人。加锁和解锁必须是同一个客户端,客 … 继续阅读
Redis的持久化
最近要对看了生产环境的Redis配置文件,对redis的持久化比较感兴趣,于是整理了相关的内容,用来加深记忆。 Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件): RDB持久化方式会在一个特定的间隔保存那个时间点的一个数据快照。 AOF持久化方式则会记录每一个服务器收到的写操作。在服务启动时,这些记录的操作会逐条执行从而重建出原来的数据。写操作命令记录的格式跟Redis协 … 继续阅读
Redis雪崩、穿透和击穿
缓存雪崩 由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。 解决方法: 随机的缓存过期时间 给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存 1、缓存标 … 继续阅读
Redis RPush 命令
今天帮订单组那边,设计一个基于redis的消息系统,和架构师聊的时候,他建议了我使用RPush命令。RPush命令的返回结果是,操作之后列表的长度,这个在某些场合有一些特殊妙用。于是整理个文章来记录RPush命令 Redis Rpush 命令 Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。 如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列 … 继续阅读
Redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 我的理解是,除了String意外,其他数据类型本质上都是容器,对这些数据类型的操作,就是对这些数据类型的读写,对其进行CRUD。 String string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 ke … 继续阅读