随笔分类 - Redis
摘要:使用缓存一些常见的套路问题。 缓存穿透 场景:大量请求访问某个不存在的KEY 在缓存设计中,查询缓存 -> key不存在 -> 回源DB -> 更新缓存,这是一个典型的方案。 缓存穿透是指查询一个一定不存在的Key,由于缓存层不存在,将导致这个不存在的数据每次请求都要到存储层去查询,直接对DB造成影
阅读全文
摘要:作为缓存系统都要定期清理无效数据,就需要一个主键失效和淘汰策略。 1.EXPIRE主键失效机制 在Redis当中,有生存期的key被称为volatile,在创建缓存时,要为给定的key设置生存期,当key过期的时候(生存期为0),它可能会被删除。 (1)影响生存时间的一些操作 生存时间可以通过使用
阅读全文
摘要:我们知道Redis支持五种数据类型, 分别是字符串、哈希表(map)、列表(list)、集合(set)和有序集合,和Java的集合框架类似,不同数据类型的数据结构实也是不一样的。 1.Redis中的redisObject对象 Redis是使用C编写的,内部实现了一个struct结构体redisObj
阅读全文
摘要:Redis相比Memcached的很大一个优势是支持数据的持久化, 通常持久化的场景一个是做数据库使用,另一个是Redis在做缓存服务器时,防止缓存失效。 Redis的持久化主要有快照Snapshotting和AOF日志文件两种方式。 前者会根据配置的规则定时将内存中的数据持久化到硬盘上, 后者则是
阅读全文
摘要:这里我使用Redis的发布、订阅功能实现简单的消息队列,基本的命令有publish、subscribe等。 在Jedis中,有对应的java方法,但是只能发布字符串消息。为了传输对象,需要将对象进行序列化,并封装成字符串进行处理。 使用Redis实现消息队列 封装一个消息对象 为这个消息对象提供序列
阅读全文
摘要:Redis的消息通知可以使用List类型的LPUSH和RPOP(左进右出),当然更方便的是直接使用Redis的Pub/Sub(发布/订阅)模式。 1.使用List实现队列 使用列表类型的LPUSH和RPOP命令(或者RPUSH和LPOP命令,右进左出),可以很方便的实现一个任务队列,但是需要设置定时
阅读全文
摘要:1.关系型数据库的事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。 Atomic(原子性): 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。 Consistency(一致性):事务执行的结
阅读全文
摘要:前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能。 Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数据类型不支持嵌套。下面学习一下这五种数据类型的特点和简单应用。 1.String 字符串 Strin
阅读全文
摘要:一、Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。支持直接配置为session handle。Memcach
阅读全文