Redis分布式锁

目录

一、Redis分布式锁

二、Redis缓存过期淘汰策略

三、Redis的LRU算法


java 复制代码
面试题
1、知道分布式锁吗?有哪些实现方案?
2、你谈谈对redis分布式锁的理解?删key的时候有什么问题?
3、redis除了拿来做缓存,你还见过给予Redis的什么用法?
4、Redis做分布式锁的时候有需要注意的问题?
5、如果redis单点部署,会带来什么问题?那你准备怎么解决单点问题呢?
6、集群模式下,比如主从模式,有没有什么问题呢?
7、那你简单的介绍一下Redlock吧?你简历上写redisson,请你谈谈
8、Redis分布式锁如何续期?看门狗知道吗?
9、Redis的LRU了解过吗?可否手写一个LRU算法?

一、Redis分布式锁

二、Redis缓存过期淘汰策略

三、Redis的LRU算法

LRU算法:例:手机点击应用,在后台队列排队

缓存:读和写两个操作,缓存有空间限制的,大小会有一定上限

算法来源:力扣(LeetCode)官网 -146. LRU 缓存

设计思想:

1、所谓缓存,必须要有读+写两个操作,按照命中率的思路考虑,写操作+读操作时间复杂度都需要为O(1)

2、特性要求

2.1、必须要有顺序之分,一区分最近使用的和很久没有使用的数据排序。

2.2、写和读操作一次搞定

2.3、如果容量满了要删除最不常用的数据,每次新访问还要把新的数据插入到队头(按照业务自己设定左右那一边是队头)

查找快、插入块、删除快,且还需要先后排序---->什么样的数据结构可以满足这个问题?

你是否可以在O(1)时间复杂度内完成这两种操作?

如果一次就可以找到,你觉得什么数据结构最合适?

LRU算法核心是哈希链表

java 复制代码
package com.lwz.lru;

import java.util.LinkedHashMap;
import java.util.Map;

public class LRUCacheTest<K, V> extends LinkedHashMap<K, V> {

    private final int capacity;

    public LRUCacheTest(int capacity) {
        /*
           true for access-order,
           false for insertion-order.
         */
        super(capacity, 0.75F, true);
        this.capacity = capacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return super.size() > capacity;
    }

    public static void main(String[] args) {
        LRUCacheTest<Integer, String> lRUCacheTest = new LRUCacheTest<>(3);
        lRUCacheTest.put(1, "a");
        lRUCacheTest.put(2, "b");
        lRUCacheTest.put(3, "c");
        System.out.println(lRUCacheTest.keySet());
        lRUCacheTest.put(4, "d");
        System.out.println(lRUCacheTest.keySet());
        lRUCacheTest.put(3, "c");
        System.out.println(lRUCacheTest.keySet());
    }
}

Redis应用场景

一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!

相关推荐
初次攀爬者1 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
爱可生开源社区1 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1771 天前
《从零搭建NestJS项目》
数据库·typescript
加号32 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏2 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐2 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再2 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest2 天前
数据库SQL学习
数据库·sql
jnrjian2 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle
十月南城2 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark