java自动换行:关放大阅读展开代码set key value get key set expiretime key setnx key value
使用场景
只要数据可以按照 k-v对形成字符串类型,都可以使用string存储,并可以设置精确到key的ttl
可用于缓存对象,用incr命令统计文章的阅读量等
java自动换行:关放大阅读展开代码lpush key value1 value2... rpop key 从list右边删除一个元素 llen key # 查看list的长度 lrange key 0 -1 # 查看该key的所用元素
使用场景
消息队列,按照时间周期性更新的排行榜(lrange)等
java自动换行:关放大阅读展开代码hset key field1 value1 field2 value2... hget key field
使用场景
存储对象实例,用户的购物车(hset userId skuId nums)
元素不可重复的集合
java自动换行:关放大阅读展开代码sadd key member1 member2 ... smembers key # 去除一个集合中的所有元素 sinter key1 key2 .. # 对多个集合取交集 sunion key1 key2 .. # 对多个集合取并集 sdiff key1 key2 .. # 对多个集合取差集
使用场景
共同关注好友等(sinter)
java自动换行:关放大阅读展开代码zadd key score1 member1 socre2 member2 ... # 向集合加入元素 zrangebyscore key start end withsocres # 从集合中取出指定score范围的数据,默认从小到大
使用场景
排行榜等问题(zadd rank value1 key1 value2 key2 ; ZREVRANGEBYSCORE rank 3 0取前三名)
Flink的状态收到flink内部的管理,无法使用其他的进程访问Flink内部的状态做缓存的更新,故排除
使用旁路缓存需要考虑的点:
java自动换行:关放大阅读展开代码# 主要考虑维度数据发生变更时,将缓存中的旧维度数据做一个同步的更新 # 则当向HBase写维度数据,判断通过maxwell实时采集的ODS层数据是否类型为Update?,为Update,则说明维度数据发生了变更 # 此时需要删除redis中的旧缓存即可,保证了redis总是最新的维度数据
java自动换行:关放大阅读展开代码# 项目中使用了热缓存的方式,即设置了缓存的ttl,为2天,主要是维度数据 // 写维度数据到redis String key = tableName + ":" + id; // 并设置key的生命周期为2天 client.setex(key,24 * 2 * 60 * 60,dim.toJSONString());
何为缓存击穿?单一数据热点,高并发访问导致缓存失效
一般来说维度数据读取不会存在高并发访问的情况,故不会出现缓存击穿
大量无效的key即不存在与redis,也不存在数据库,造成数据的访问压力
HBase中维度总是来源于ODS中过滤出的维度数据,之后写入HBase;当DWS层需要维度,首先向Redis读取,redis无所需的数据,才会向HBase读取,稍后就写入Redis,不会出现缓存穿透问题
缓存雪崩指的是大量的热点数据无法在 Redis 缓存中处理(大面积热点数据缓存失效、Redis 宕机),流量全部打到数据库,导致数据库极大压力
目前的系统是存在缓存雪崩的问题的!!!!
本文作者:hedeoer
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!