目录 键的设计 value 设计 拒绝 bigkey (强制) bigkey 的危害: bigKey 的产生 如何优化 bigkey 选择合适的数据类型 控制 key 的生命周期,redis 不是垃圾桶 命令的使用 关注元素数量 禁用危险命令 批量操作提升效率 不建议使用自带事务 客户端的使用 避免
nvim与操作系统剪贴板互通
为了能够在 Windows 上使用系统剪贴板,您需要安装win32yank应用程序。您可以从这里下载。之后,您需要将剪贴板设置 vim 脚本 set clipboard+=unnamedplus lua 脚本 vim.opt.clipboard = "unnamedplus"
Redis缓存击穿和穿透以及雪崩
缓存穿透 缓存穿透问题解决方案 缓存空对象 布隆过滤器 redisson 实现布隆过滤器 引入依赖 预先放入数据 使用 缓存击穿 缓存雪崩 预防和解决方案 热点key的重建优化 缓存穿透 缓存穿透指的是查询一个根本不存在的数据,缓存层和存储层
Redis 的主从和哨兵以及集群架构
Redis 的主从架构 主从架构搭建步骤 1. 添加从节点 复制一份 redis.conf 文件,将相关配置修改如下: # 如果在不同机器上部署,端口可以不用修改 port 6380 # 把 pid 进程号写入 pidfile 配置的文件 pidfile /var/run/redis_6380.pid logfile "6380.log" # 指定数据存放目录 dir /usr/local/redis-5.0.3/data/6380 # 需要注释掉 bind # bind 12
redis基础配置和持久化
redis 的单线程和和高性能 redis 是单线程的吗 Redis 的单线程主要是指网络 IO 和键值对读写是由一个线程完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如:持久化,异步删除,集群数据同步等,其实是由额外的
Redis中渐进式遍历key
为什么需要渐进式遍历key 有时候需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,可能是修改它的值,也可能是删除 key。这里就有一个问题,如何从海量的 key 中找出满足特定前缀的 key 列表来? Redis 提供
2023
我的 2023 代办 五月 开始看 B 站教学视频 视频看完,示例代码敲完 五月底完成 当前进度:【22 / 53】 RabbitMQ 技能,输出至少 3 篇博客 RocketMQ 技能, 输出至少 2 篇博客, 五月底完成, 当前进度: 【1/2】 五分月跳绳次数 15 次,每次至少 30
常用工具备忘
查看项目依赖 gradle: gradle dependencies maven: mvn dependency:tree 排除依赖 不需要某个依赖或者需要替换掉某依赖时,就需要把这个依赖排除: 以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库。如果你正在构建一个生产或消
AOP 的使用
声明切点@Poincut 把切点声明成一个方法,便于重用 @Poincut 的使用格式如下: @Poincut("PCD") // 切点表达式 表示对哪些方法进行增强 public void pc(){} // 切点签名,返回值必须为 void 10 种切点表达式 AspectJ 的切点指示符 AspectJ pointcut designators (PCD) ,也就是俗称的切点表达式
面向切面的Spring
横切关注点 散播应用中多处的功能被称为横切关注点 安全就是一个关注点,每个方法或者类都需要注重安全 方法参数日志记录也是一个关注点 以及事务管理 横切关注点从概念上讲是与业务分离的,但往往会直接嵌入到业务中 多个
spring 如何解决循环依赖
什么是循环依赖 A 类中有一个属性 B ,也就是说 A 依赖 B,同时 B 类中有一个属性 A, 也就是说 B 依赖 A. 他们之间的依赖关系形成了环。就是我们说的循环依赖,如下图: 循环依赖示例 public class CircularDependenciesDemo { public static void main(String[] args) { new A1(); } } class A1 { private B1 b1;
获取正在运行的进程
获取系统中正在运行的进程。和平台无关 import ( ps "github.com/mitchellh/go-ps" ) func running() bool { processList, err := ps.Processes() if err != nil { fmt.Printf("err %v\n",err); return false } var process ps.Process num := 0 for x := range processList { process = processList[x] if process.Executable() == "test.exe" { num ++ if num >= 2 { fmt.Println("on running") return true } } } return false }
spring IOC 加载过程简要介绍
本文从源码层面简要介绍一下 Spring IoC 加载过程,以及这个过程遇到的重点方法,重点类。 new AnnotationConfigApplicationContext() 一切的根源都要从 new AnnotationConfigApplicationContext() 方法开始,这是 Spring 启动的入口,先准备如下代码: public class ContextDemo { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class); context.getBean("car",Car.class); } } @Configuration @ComponentScan(basePackageClasses = {Car.class}) class Config{ @Bean public User1 user(){
IoC 思想和实现
我们先不粘贴官方的晦涩定义,通过一个例子来一步一步的引出 IoC 思想,真正的体会到 IoC 思想对我们编程带来的益处。 车,引擎,轮胎 一个汽车需要引擎和轮胎,有下面模型: /** * 东风汽车 */ class NissanCar{ private Engine engine; private Tyre tyre; public NissanCar() { this.engine = new EngineV1(); this.tyre
自定义注解
注解也被称为元数据,它为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。 注解是受c#启发,在 javaSE5 中引入的,虽然javaSE5 预先定义了一些注解,但一般来说,主