本章介绍分布式架构的底层技术。主要说明面试过程中可能被问到的技术点。
专注于为中小企业提供成都网站制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业东乌珠穆沁免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
缓存穿透
缓存学雪崩
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
支持的方法: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的理由:简单