INDEX
§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 相当于一套权限控制,从下面维度控制连接
- 允许执行的命令
- 允许访问的键
- 接入权限,即以前就有的用户名密码
可以有效大的防止用户执行高危命令,如flushb
、shutown
、keys *
设置
acl setuser user_name on >password ~key_express +command
- user_name 用户名
- password 密码
- key_express 可以操作的键的表达式
- command 可以操作的指令