开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭
Redis
启动Redis命令:redis-server redis.conf
进入客户端命令:redis-cli -p 6379(端口号) exit /quit/ctrl+c 退出
关闭Redis命令:redis-cli -p 6379 shutdown
存数据:set key1 value1
set key2 value2
批量存数据:mset key1 value1 key2 value2
取数据:get key1
get key2
判断数据是否存在:exits key1
exits key2
查询所有的数据:keys *
删除数据:del key1
del key2
查询数据类型:type key1
type key2
Redis默认的内存优化策略
- 定期删除:每隔100毫秒检查是否有过期的key,检查时随机的方式进行检查(不是检查所有,效率低)
- 惰性策略:当用户获取key的时候,首先检查是否有超时的数据,如果已将删除,则删除数据
Redis分片机制:
- 存在问题:虽然实现了内存扩容,但是redis节点并没有实现高可用,如果节点宕机,则redis分片将不可用
一致性哈希算法
- 一致性哈希算法目的是解决分布式缓存的问题
- 如果数据相同,则hash结果必然相同
- 常见hash值,由八位16进制数组成,共有2^32种可能性
Hash算法的三种特性
- 平衡性:hash的结果平均分配到每个节点上,这样从算法上解决了负载均衡的问题
- 单调性:在新增或者删减节点时,不影响系统的正常运行
- 分散性: 将数据分散存储
Redis哨兵机制:
- 优点:哨兵可以实现redis节点的高可用
- 缺点:哨兵本身没有实现高可用的效果
Redsi集群搭建:
把热点数据保存到内存中,提高了网站的响应速度,提高了用户体验。
使用Redis集群,保证了数据分散存储,和数据存储的一致性,实现了高可用,以及服务故障的自动迁移。
redis-server 7000/redis.conf &
redis-cli -p 7000 shutdown &
Redis集群宕机条件:Redis集群中主机缺失,且没有从机替补时,Redis内存数据缺失,集群崩溃。
算法面试题:
- 核心知识:一致性哈希算法和哈希槽算法解决的都是数据归谁管的问题,最终的数据都会存储到Node节点中。
- Redis集群中最多有16384个主机(16384个槽位),用来区分数据归哪个节点来存储。
- Redis集群中数据的存储大小由redis的内存大小来决定。
缓存相关面试题:
- 缓存穿透:用户在高并发环境下,频繁访问数据库中不存在的数据,导致用户直接访问数据库导致数据库服务器宕机。
- **缓存击穿:用户在高并发环境下,某个热点数据突然失效,**导致大量请求访问数据库,导致数据库宕机。
- 缓存雪崩:缓存中大量内存数据失效,导致用户访问缓存几率太低,导致大请求访问数据库,数据库宕机。
布隆过滤器
- 用法:由hash函数,二进制向量组成
- 作用:判断一个元素是否存在于集合中
- 优点:占用空间更小,效率更高
- 缺点:有一定的误判率(hash碰撞),删除困难
Redis中共有16个数据库(下标0到15)
切换数据库:select 0
select 1
清空当前数据库:flushdb
清空全部数据库:flushall
泛型(约束)
作用于类、接口、方法上(位置:在方法返回值前面)
版权声明:本文为m0_54164679原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。