杂学2024上半年

LUA脚本介绍

Lua 由标准 C 编写而成,并以源代码形式开放,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行,可以很容易集成在一些软件系统里,可以为一些中间件提供支持功能,比如 nginx,redis。Lua 并没有提供强大的库,这是由它的定位决定的。所以 Lua 不适合开发独立应用程序。Lua 有一个同时进行的 JIT 项目,提供在特定平台上的即时编译功能。
  Lua 脚本可以很容易地被 C/C++ 代码调用,也可以反过来调用 C/C++ 的函数,这使得 Lua 在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替 XML,ini 等文件格式,并且更容易理解和维护。 一个完整的 Lua 解释器不过 200k,在所有脚本引擎中,Lua 的速度是最快的。这一切都决定了 Lua 是作为嵌入式脚本的最佳选择。

  • LUA脚本优点
  1. 减少网络开销

    本来 N 次网络请求的操作,可以用一个请求完成。原先 N 次请求的逻辑放在 Redis 服务器上完成,减少了网络往返时延。

  2. 原子操作

    Redis 会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在脚本运行过程中无需担心会出现竞争条件,无需使用事务。

    Redis 使用单个 Lua 解释器去运行所有脚本,并且, Redis 也保证脚本会以原子性(atomic)的方式执行:当某个脚本正在运行的时候,不会有其他脚本或 Redis 命令被执行。 这和使用 MULTI / EXEC 包围的事务很类似。在其他别的客户端看来,脚本的效果要么是不可见的 (not visible),要么就是已完成的 (already completed)。 另一方面,这也意味着,执行一个运行缓慢的脚本并不是一个好主意。写一个跑得很快很顺溜的脚本并不难, 因为脚本的运行开销非常少,但是当你不得不使用一些跑得比较慢的脚本时,请小心, 因为当这些蜗牛脚本在慢吞吞地运行的时候,其他客户端会因为服务器正忙而无法执行命令。

  3. 复用

    客户端发送的脚本会永久存储在 Redis 中。这样其他客户端就可以复用这一脚本,而不需要使用代码完成同样的逻辑。

  • 命令集(redis)
  1. Redis 中使用 Lua 脚本

    Redis 中使用 Lua 脚本,主要是如下几个命令。

    • EVAL
    • EVALSHA
    • SCRIPT LOAD
    • SCRIPT EXISTS
    • SCRIPT FLUSH
    • SCRIPT KILL
    • SCRIPT DEBUG

    https://blog.csdn.net/piaoranyuji/article/details/125281197

懒加载

懒加载是一种常见的优化技术,它可以延迟对象的创建或初始化,直到对象第一次被使用时才进行。 这种技术可以帮助我们减少资源的浪费,提高程序的运行效率。

线程池创建

import java.util.concurrent.*;
@Slf4j
public class 线程数 {
        //核心线程数
        private static final int CPU_SIZE = Runtime.getRuntime().availableProcessors();
        //空闲存活时间
        private static final long KEEP_LIVE = 60 * 5L;
        //是否允许核心线程回收
        private static final boolean ALLOW_CORE_RECOVER  = true;
        
        //线程池初始化锁
        private static final Object LOCK = new Object();
        //线程池实例
        private static ThreadPoolExecutor  EXECUTOR_POOL;
        
        //懒加载
        public static ThreadPoolExecutor getThreadExecutor(){
            if(null == EXECUTOR_POOL){
                synchronized (LOCK) {
                    if(null == EXECUTOR_POOL){
                        EXECUTOR_POOL = new ThreadPoolExecutor(
                                CPU_SIZE * (1 + 10),
                                CPU_SIZE << 7,
                                KEEP_LIVE,
                                TimeUnit.SECONDS,
                                new SynchronousQueue<>(),
                                r -> {
                                    Thread thread = new Thread(() -> {
                                        try {
                                            r.run();
                                        } catch (Exception e) {
                                            log.error("处理异常");
                                        }
                                    });
                                    thread.setDaemon(false);
                                    thread.setPriority(Thread.NORM_PRIORITY);
                                    thread.setName("自定义线程池");
                                    return thread;
                                }, 
                                new RejectedExecutionHandler() {
                                    @Override
                                    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                                        try {
                                            executor.getQueue().put(r);
                                            log.warn("队列已满");
                                        } catch (Exception e) {
                                            e.printStackTrace();
                                        }
                                    }
                                }
                        );
                            EXECUTOR_POOL.allowCoreThreadTimeOut(true);
                    }
                }
            }
            return EXECUTOR_POOL;
        }
        public static void stoopPools(){
            if(null != EXECUTOR_POOL){
                EXECUTOR_POOL.shutdown();
                EXECUTOR_POOL = null;
            }
        }
    
    }

sql

安装mysql8.0
wget http://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm

rpm -ivh mysql80-community-release-el7-3.noarch.rpm

yum install mysql-server -y

service mysqld start

service mysqld status

systemctl enable mysqld.service

原文链接:https://blog.csdn.net/qq_44866828/article/details/116602544

修改密码,默认也是没有密码的直接回车输入新密码

[root@localhost ~]# mysqladmin -uroot -p password
Enter password:
New password:
Confirm new password:
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

DECLARE
  sql_query VARCHAR(500);
BEGIN
  FOR tables IN (SELECT table_name FROM user_tables WHERE table_name LIKE 'PREFIX%') LOOP
    sql_query := 'DROP TABLE ' || tables.table_name;
    EXECUTE IMMEDIATE sql_query;
  END LOOP;
END;
/

批量删除当前用户下的表(oceanbase)

oracle 用法

  • partition by用于给结果集分组;     row_number 添加行号
    
    先看例子
    
    create table TESTDB  (A varchar(8), B varchar(8))
    
    insert into TESTDB
    select 'A1', 'B1' union all
    select 'A1', 'B2' union all
    select 'A1', 'B3' union all
    select 'A2', 'B4' union all
    select 'A2', 'B5' union all
    select 'A2', 'B6' union all
    select 'A3', 'B7' union all
    select 'A3', 'B3' union all
    select 'A3', 'B4'. 仅仅使用ROW_NUMBER() OVER的结果
    SELECT *,   ROW_NUMBER()  OVER ( ORDER BY A )    as NUM         FROM TESTDB
    -----单纯标出了行号
    A  B   NUM
    ----------
    A3  B7   1
    A3  B3   2
    A3  B4   3
    A2  B4   4
    A2  B5   5
    A2  B6   6
    A1  B1   7
    A1  B2   8
    A1  B3   9.  使用PARTITION BY 函数分组
    SELECT  *,  ROW_NUMBER()  OVER  ( PARTITION BY A ORDER BY A )    as NUM          FROM TESTDB
    ---对A分组,比如A1有3个,他就给每个A1标上是第几个
    A  B  NUM
    -------------
    A1  B1  1
    A1  B2  2
    A1  B3  3
    A2  B4  1
    A2  B5  2
    A2  B6  3
    A3  B7  1
    A3  B3  2
    A3  B4  3
    ————————————————
    
    
  • select *
      from def_team_user
     where not exists (select 1
              from def_user
             where def_user.user_id = def_team_user.user_id);
    -- 使用select 1 的作用是加快处理速度
    
  • MERGE INTO target_table AS target
    USING source_table AS source
    ON (target.id = source.id)
    WHEN MATCHED THEN
      UPDATE SET target.name = source.name, target.salary = source.salary
    WHEN NOT MATCHED BY SOURCE THEN
      DELETE;
    -- update 用自己的表更新自己的表 就在 target 和 source 里面写同一张表
    -- on 里面加上多个条件时 用and 连接 记得带上括号
    -- not matched 无条件的时候就可以不写
    

注册中心

在这里插入图片描述

zk为zookeeper , cap原则,又称CAP定理,是分布式系统中的三个重要性质:一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)的权衡。这三个性质通常无法同时满足,必须做出取舍:

  • 一致性(Consistency)。指的是在分布式系统中的所有数据备份在同一时刻具有相同的值,即所有节点访问同一份最新的数据副本。
  • 可用性(Availability)。指的是在系统遭遇部分节点故障的情况下,系统仍能响应客户端的读写请求,确保数据更新的高可用性。
  • 分区容错性(Partition tolerance)。指的是系统在网络分区情况下仍能继续运行并提供服务。网络分区意味着某些节点与其他节点断开连接,此时系统需保持运行。

根据CAP原则,一个分布式系统最多只能同时实现上述性质中的两个。这意味着系统设计者必须在一致性、可用性和分区容错性之间做出选择。通常,为了保持分区容错性

LINUX

  • awk的用法

​ cat xxx.log | grep ‘xxx’ | awk -F “,(注释:分割的字符如:逗号)” ‘printf $2"\n"’ |awk -F “分割符” ‘{a+=$2}END{print a/NR"\n"}’

‘printf $2"\n"’ 表示取分割后的第二个字符

print a/NR"\n" 表示取平均值 NR为行数

|管道的作用是前一个的返回值作为后一个的输入

杂学

  • ompareTo的用法 x = 10 y = 100 x.compareto(y) 返回结果为 -1 反过来是 1

  • 在Unix/Linux系统中,jmap命令通常位于Java的安装目录下的bin文件夹中。你可以通过以下命令来查找jmap的位置:

    which jmap
    
  • jmap要与进程相同的权限才行

  • BigDecimal的会有坑,他会在证书的时候进行打印的时候是一个科学计数法的形式进行展示

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值