• 基础 | NIO - [FileLock]


    §1 FileLock

    概述

    • 文件锁是进程级别的锁
      • 可以解决多个进程并发访问
      • 不能解决多线程并发访问修改同一个文件
    • 被进程锁锁住的文件
      • 进程内的所有线程都可以访问修改
      • 其他进程是否可以对文件进行操作由文件锁 性质 决定
      • 当前进程不能重复获取同一个文件的文件锁
    • 文件锁被当前程序所属 JVM 实例持有,只有下列方式可以释放锁
      • 调用 release()
      • 关闭对应的 FileChannel
      • 退出 JVM

    性质
    排它锁
    进程对某文件上锁后,其他进程不能读写此文件

    共享锁
    进程对某文件上锁后,其他进程可以读取此文件

    方法
    加锁
    lock()

    • 阻塞式 对整个文件进行加锁
    • 默认排他锁

    lock(position,size,shared)

    • 阻塞式 自定义加锁方式
    • position + size 可以指定加锁范围
    • shared 可以指定是否是共享锁

    tryLock()

    • 非阻塞式 对整个文件进行加锁
    • 默认排它锁

    tryLock(position,size,shared)

    • 非阻塞式 自定义加锁方式
    • position + size 可以指定加锁范围
    • shared 可以指定是否是共享锁

    解锁
    release()

    示例

    public void filelock(String filePath){
        try (
                FileChannel channel = FileChannel.open(Paths.get(filePath), StandardOpenOption.WRITE,StandardOpenOption.APPEND);
                BufferedReader bf = new BufferedReader(new FileReader(filePath));
        ){
            ByteBuffer buf = ByteBuffer.wrap("0123456789".getBytes(StandardCharsets.UTF_8));
    
            FileLock lock = channel.lock();
            channel.write(buf);
            lock.release();
    
            String line = null;
            while((line = bf.readLine()) != null){
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    §2 ACL

    简介
    Redis ACL = Access Control List,访问控制表
    ACL 相当于一套权限控制,从下面维度控制连接

    • 允许执行的命令
    • 允许访问的键
    • 接入权限,即以前就有的用户名密码
      可以有效大的防止用户执行高危命令,如 flushbshutownkeys *

    设置
    acl setuser user_name on >password ~key_express +command

    • user_name 用户名
    • password 密码
    • key_express 可以操作的键的表达式
    • command 可以操作的指令
  • 相关阅读:
    NB15 牛群编号的回文顺序II
    Python当前进程信息 (os包)分享
    Docker(一)、linux环境安装Docker
    auto 推导
    windows server安装mysql后公司区域网连接
    P1 缓冲池管理
    论文阅读:2023_Semantic Hearing: Programming Acoustic Scenes with Binaural Hearables
    鸿蒙HarmonyOS实战-Web组件(页面跳转和浏览记录)
    氛围灯控制器VALS
    关于SYSTICK延时函数的两个小疑问
  • 原文地址:https://blog.csdn.net/ZEUS00456/article/details/127112236