MyBatis-RedisCache源码分析

回顾

在前面,我们通过 redis​ 集成了 MyBatis​ 的二级缓存,440.MyBatis的二级缓存整合redis ,接下来,我们来分析一下 RedisCache​ 的源码。

源码分析

RedisCache 主要是通过实现 Cache 接口来做的。数据存储和获取主要是通过操作 jedis 来实现。

public final class RedisCache implements Cache {
    private final ReadWriteLock readWriteLock = new DummyReadWriteLock();
    private String id;
    private static JedisPool pool;

    public RedisCache(String id) {
        if (id == null) {
            throw new IllegalArgumentException("Cache instances require an ID");
        } else {
            this.id = id;
            RedisConfig redisConfig = RedisConfigurationBuilder.getInstance().parseConfiguration();
            pool = new JedisPool(redisConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getConnectionTimeout(), redisConfig.getSoTimeout(), redisConfig.getPassword(), redisConfig.getDatabase(), redisConfig.getClientName());
        }
    }
}

Terwer...大约 2 分钟MyBatis后端开发开源框架通过方法分析实现读取
使用nodejs实现ed25519的公钥加密和私钥解密

主要使用了 ed25519 库

加解密和验证代码

// Common.js and ECMAScript Modules (ESM)
import * as ed from '@noble/ed25519';
// If you're using single file, use global variable instead: `window.nobleEd25519`

const verifyEd = async function (prikey, pubkey) {
    console.log("你输入的私钥是:" + prikey)
    console.log("环境变量中的公钥是:" + pubkey)

    // ====================
    // 新私钥开始
    // ====================
    // const newPrivateKey = ed.utils.randomPrivateKey();
    // const privateKeyStr = Buffer.from(newPrivateKey).toString('base64');
    // console.log("new privateKey=>", privateKeyStr)
    // ====================
    // 新私钥结束
    // ====================
  
    const privateKeyStr = prikey

    const privateKey = Buffer.from(privateKeyStr, 'base64');
    // console.log("parsed privateKey=>", privateKey)

    // ====================
    // 新公钥开始
    // ====================
    // const newPublicKey = await ed.getPublicKey(privateKey);
    // const publicKeyStr = Buffer.from(newPublicKey).toString('base64');
    // console.log("new publicKey=>", publicKeyStr)
    // ====================
    // 新公钥结束
    // ====================
  
    const publicKeyStr = pubkey

    const publicKey = Buffer.from(publicKeyStr, 'base64');
    // console.log("parsed publicKey=>", publicKey)

    try {
        const valiPass = "123456";
        const message = Uint8Array.from(valiPass, x => x.charCodeAt(0))
        // const messageStr = Buffer.from(message).toString('base64');
        // console.log("校验密码:", valiPass)

        const signature = await ed.sign(message, privateKey);
        const isValid = await ed.verify(signature, message, publicKey);
        // console.log("验证结果:", isValid ? "有效" : "无效")
        return isValid;
    } catch (e) {
        console.warn("校验失败,请检查密码", e)
        return false;
    }
}

const privateKeyStr = "prikey";
const publicKeyStr = "pubkey"
const valiResult = verifyEd(privateKeyStr, publicKeyStr)
valiResult.then(function(item){
    console.log("item=>", item)
})

Terwer...大约 1 分钟前端开发ed25519nodepassword私钥使用实现加密解密
Struts2自定义方法最佳实践

自定义方法实现

在 struts.xml 配置 method ,并且在对应的 Action 实现对应方法即可。

struts.xml

<action name="login2" class="space.terwer.struts23.LoginAction2" method="myExecute">
	<result name="success">/result2.jsp</result>
</action>

Terwer...大约 1 分钟后端开发Struts2方法自定义实现对应逻辑strutsstruts2custommethod
Java_9

在 2011 年的 JavaOne 中,Oracle 讨论了一些他们希望在 2016 年于 Java 9 中发布的功能。 [232] Java 9 应当对千兆级堆拥有更好的支持,同时能够更好地集成本机代码,且拥有新的垃圾收集器 G1 和能够自我调节的 JVM。 [233] 2016 年初,Java 9 的发布被重新定为 2017 年 3 月;2017 年 3 月时,发布日期又被拖延至 2017 年 7 月; [234] 后来又因 Java 执行委员会对 Jigsaw 项目实现的分歧而最终定为 2017 年 9 月 21 日,在此期间 Oracle 回应了部分疑问,并对一些重要的技术问题进行了修正。在 2017 年 6 月的最后几天,JCP 对拟议的模块系统方案达成了共识。


Terwer...大约 4 分钟后端开发JavaSEJava语言新特性发布一个实现模块javajdkjava9jdk9javase年月日
两栏布局左右拖拽效果实现方案

CSS方式实现

screenshot-20220718-144148
screenshot-20220718-144148

第一种利用的css的方式实现,利用浏览器非 overflow:auto 元素 设置 resize 可以拉伸的特性实现无JavaScript的分栏宽度控制。


Terwer...大约 3 分钟前端开发拖拽布局实现方式可以区域