赞
踩
问:项目中使用Redis主要来做什么?
答:主要是用来做缓存和分布式锁。
问:那Redis的存储类型和底层原理是怎样的?
答:Redis主要有String、Set、Hash、List、Sort Set;项目中还是以String使用场景居多。
问:讲讲Set的底层存储结构是怎样的?
答:没答上来,后补。
问:请你设计个Redis的分布式锁?
答:通过LUA脚本设置一个Key,或者在Redis3.0之后使用setnx。并对这个key设置过期时间。
问:为什么要使用LUA脚本?
答:保证原子性,避免同时多个线程set或者设置过期时间错误。
问:如果一个线程在过期时间内没有执行完,这个锁被自动释放了怎么办?
答:开启一个监控线程,watch dog监控线程运行状态,进行锁续命。
问:那释放锁有什么要注意的吗?
答:释放锁只能有加锁的线程去释放,防止锁被误删除。
问:那如何识别到是改线程加的锁呢?
答:可以使用线程名作为value,释放前比对value值。
问:那分布式情况下如果线程名相同怎么吧?
答:可以使用线程名加分布式ID(雪花算法)来命名。
问:分布式情况下,高并发的写操作,会造成多台机器中的线程共同持有锁吗?
答:可能会,但是Redis使用了RedLock(红锁)的方式来尽量避免这种情况,但仍然存在多线程持有锁的情况。如果要保证100%的但线程持有锁的话,可以使用MySQL做分布式锁。
问:知道Redis的持久化机制吗?
答:redis持久化目的:为了避免进程退出导致数据的永久丢失;持久化的方式分为RDB和AOF。
问:Redis的部署方式有哪几种?
答:主从,哨兵和集群。
问:你们公司(项目)使用的是那种部署方式?优缺点是什么?
答:采用的集群部署方式。
问:除了redis还有什么其他的分布式锁方案?
答:…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。