基础 | NIO - [FileLock & ACL]

§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 可以操作的指令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值