本章介绍分布式架构的底层技术。主要说明面试过程中可能被问到的技术点。
缓存穿透
缓存学雪崩
Redis
Memcached
Guava
缓存穿透:查询缓存和数据库中一定不存在的数据时,每次查询都是直接到数据库的,这种现象称为缓存穿透
此时,如果有大量的请求时,会对数据库造成直接冲击,甚至会导致崩溃
缓存雪崩:缓存服务器宕机了,那么所有查询直接落在数据库,对数据库造成巨大压力
热点数据集中失效:本身大批量数据同时失效对Redis服务器也会造成影响,可能会出现慢的情形;再者失效期间,所有的用户请求都会落到数据库上,也会对数据库造成巨大的压力
string
Redis的最基本的数据结构,可以包含任意数据。一个key对应一个string的value。string类型是二进制安全的。每个string的value最大可以512M
支持的方法:set、get、mset、mget、setex、setnx
list
列表,一个简单的字符串列表,按照插入的顺序排序,可以向头部(左边)或尾部(右边)添加数据,底层是链表
支持的方法:lpush、lpushx、lpop、lrange、lset、lindex、llen、rpush、rpop
set
string的无序集合
支持的方法:sadd、scard、sdiff、sinter、sunion、sismember、smembers
zset(sorted set)
sorted set有序集合,也是string的集合,但是有序的
支持的方法:zadd、zcard
hash
hash是一个键值对集合,是一个string类型的key(这里叫做field)和value的映射表,key相当于hash的名字,类似于Java中的Map<String, Map<String, String>>
支持的方法:hset、hget、hdel、hexists、hkeys、hlen、hgetall
Redis采用单进程单线程模式,本身没有锁的概念,其对于多个客户端访问不存在并发的问题
通过jedis客户端进行并发访问时会出现连接超时、数据转换错误、阻塞等,通过以下方式解决:
redis通过定期删除和惰性删除来删除过期的key
只靠这两种机制还是删除不完全的,此时就需要内存淘汰机制了
4.0新增
支持两种持久化策略:一种是快照(snapshotting,RDB),另一种是只追加文件(append-only file,AOF)
是默认的持久化方式。在redis.conf中有以下配置
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,就会触发BFSAVE创建快照
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,就会触发BFSAVE创建快照
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,就会触发BFSAVE创建快照
appendonly yes
开启AOF后,每执行一条更改数据的命令,Redis就将该命令写入硬盘中的AOF文件
在redis.conf中有三种不同的AOF配置
appendfsync always #每次更改数据都会写入AOF文件,这会严重降低Redis的性能
appendfsync everysec #每秒同步一次,将多个命令同步到磁盘
appendfsync no #由操作系统决定何时同步
通过MULTI
,EXEC
,WATCH
等命令来实现事务功能
通过setnx实现
主数据库(master)和从数据库(slave)
一个master对应多个slave,一个slave只能有一个master
哨兵的作用是监控Redis系统的运行情况
多个哨兵监控一个master
只要将每个节点的cluster-enable配置打开即可,每个集群最少三个节点
选择Memcached的理由:简单
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。