Redis学习笔记

Redis:

redis自身是一个Map集合,其中的数据都是采用key:value的形式存储。

Redis的数据类型


String类型

添加/修改数据  set key value
获取数据  get key
删除数据 del key
添加/修改多个数据  mset key1 value1 key value2...
获取多个数据  mget key1 key2...
获取数据字符个数  strlen key  se
自增 incr key (+1)
自减 decr key  (-1)
对key的值减increm    decrby key increm (increm为整数)
对key的值加a  incrby key a (a为整数)
对key的值加b   incrbyfloat key b (b为小数)

扩展操作

设置数据具有指定的生命周期
setex key seconds value  (seconds 为你设置的时间)
控制数据的生命周期,通过数据是否失效控制业务行为,适用于所用具有时效性限定控制的操作(如投票,每个微信一天投一次)

hash类型

添加/修改数据 hset key field value (比如 hset user name hy)
获取数据 hget key field 或hgetall key(:hget user name)
删除数据 hdel key field
添加/多个修改数据 hmset key fileld1 value1 fileld2 value2
获取多个数据 hmget key fileld1 fileld2
获取哈希表中字段的数量 hlen key
获取哈希表中是否存在指定的字段 hexists key fileld

扩展操作

获取哈希表中所有的字段名或字段值
hkeys key            hvals key
设置指定字段的数值数据增加指定范围的值
hincrby key fileld increment
hincrbyfloat key fileld increment

list类型

保存多个数据,底层使用双向链表存储结构实现,保存的数据都是String类型的。(list实现日志消息队列)

添加/修改数据 lpush key value  / rpush key value
获取数据 lrange key start stop  (start是从第几位开始,stop是从第几位结束如:lrange key 0 -1)
lindex key index   llen key
获取并移除数据
lpop  key(从最右边拿出)    rpop key(从最左边拿出)

扩展操作

规定时间内获取并移除数据 blpop key timeout  brpop key timeout
移除指定数据 lrem key count value  (count为你要删除的数量)

set类型

与hash存储结构完全相同,仅存储键、不存储值,并且值是不能重复的

添加数据:sadd key menberl (menberl为键)
获取全部数据:smembers key
删除数据:srem key menberl 
获取集合数据总量:scard key
判断集合中是否包含指定数据: sismember key menber

扩展操作

随机获取集合中指定数量的数据:srandmember key count
随机获取集合中指定数量的数据并移除集合 spop key 
两个集合的交集:sinter key1 key2
两个集合的并集:sunion key1 key2
两个集合的差集:sdiff key1 key2

sorted_set类型

在set的存储结构基础上添加可排序字段,它的底层还是基于set结构的,因此数据是不能重复的,如果添加相同的数据,score的值会被覆盖

添加数据 zadd key score1 menber1
获取全部数据 zrange key start stop withscores(从低到高看)     zrevrange key start stop(从高到低看)
删除数据 zrem key member
按条件获取数据 zrangebyscore key min max  zrevrangebyscore ke max min
条件删除数据 zremrangebyrank key start stop    zremrangebyscore key min max
获取集合数据总量 zcard key        zcount key min max
集合交、并操作 zinterstore destination numkeys key (destination 为新key,numkeys为你要交集的key数量)
zunionstore destination numkeys key

扩展操作

获取数据对应的索引 zrank key member   zrevrank key member
score值获取与修改 zscore key member   zincrby key increment member

redis事务

开启事务 multi
关闭事务 discard
执行事务 exec

事务注意事项

在定义事务的过程中,语法错误,整个事务的命令都不执行;如果运行错误(指命令格式正确,但是无法正确的执行,如对list进行incr操作),它的处理结果是能够执行的命令会执行,运行错误的命令不执行,执行完毕的数据是不会自动回滚的,需自己在代码中实现。

redis 锁

对key添加监视锁,在执行exec前如果key发生了改变,终止事务执行
watch key
取消对所有key的监视 unwatch

分布式锁
使用setnx设置一个公共锁 setnx lock-key value (setnx的返回值特征,有值则返回失败,无值成功;返回成功的,有控制权,失败的,没有控制权)
删除锁的命令(释放锁) del lock-key
给锁设置时间,到时不释放,放弃锁 expire lock-key time

redis的删除策略

定时删除
创建一个定时器,当key设置有过期时间,达到过期时间时,由定时器任务立即进行删除
优点:节约内存,到时删除,快速释放不必要的内存占用
缺点:cpu压力很大,无论cpu此时负载量多高,都会占用cpu,会影响redis服务器响应时间和吞吐量。
总结:拿时间换空间

在这里插入图片描述

惰性删除
数据到达过期时间,不做处理。等下次访问数据时,如果未过期,返回数据;过期了,删除,返回不存在。
优点:解压cpu性能
缺点:内存压力大,出现长期占用内存的数据
总结:拿空间换时间

缓存问题

缓存预热
问题排查
1、请求数量较高
2、主从之间的数据吞吐量较大,数据同步操作频度较高
解决方案
前置准备工作
1、日常例行统计数据访问记录,统计访问频度较高的数据
2、利用LRu数据删除策略,构建数据留存队列,列如:storm与Kafka配合
准备工作
3、将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据
4、利用分布式多服务器同时进行数据读取,提高数据加载过程
实施
1、使用脚本程序固定触发数据预热过程
2、如果条件可以的话,使用cdn(内容分发网络),效果会更好
总结
缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据

缓存雪崩
在一个较短的时间内,缓存中大量的key集中过期
解决方案
1、更多的页面静态化处理
2、构建多级缓存架构nginx缓存+redis缓存+ehcache缓存
3、检测mysql严重耗时业务进行优化
4、限流、降级
在这里插入图片描述

缓存击穿
1、redis中某个key过期,该key访问量巨大
2、redis在短时间内发起了大量对数据库中同一数据的访问
解决方案
1、加大key的过期时长
2、加锁(分布式锁),慎用
3、设置二级缓存
在这里插入图片描述

缓存穿透
1、redis中大面积出现未命中
2、出现非正常url访问
解决方案
1、使用布隆过滤器
2、对key进行加密
在这里插入图片描述
Redis的哨兵机制
哨兵就是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现问题时通过投票机制选择新的master并将所有slave连接到新的master。

哨兵的作用
监控:不断的检测master和slave是否正常运行,master存活检测、master和slave运行情况的检测。

通知:当被监控的服务器出现问题时,向其他(哨兵间、客户端)发送通知。

自动故障转移:断开master和slave连接,选取一个slave作为master,将其slave连接到新的master,并告知客户端新的服务器地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值