Jedis

使用Java来操作Redis

什么是Jedis 是Redis官方推荐的Java操作Redis中间件, 如果你要使用Java操作Redis, 那么就该对jedis熟悉

测试

  • 导入对应的依赖
    <!-- 导入jedisd的包 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency> <!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
  • 编码测试

    • 连接数据库
    • 操作命令
    • 断开连接

PING

    @Test
void TestPing() {
//1 new Jedis 对象即可
Jedis jedis = new Jedis("127.0.0.1", 6379);
//jedis 所有的命令就是他的基本命令, 就是对象的方法
System.out.println(jedis.ping());;
}

输出PONG

常用API

  • String
  • List
  • Set
  • Hash
  • Zset

Redis-key

    @Test
void TestKey() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
System.out.println("清空数据" + jedis.flushDB());
System.out.println("判断某个键是否存在: " + jedis.exists("username"));
System.out.println("新增'<username, mxz>的键值对'" + jedis.set("username", "mxz"));
System.out.println("新增'<password, mxz>的键值对'" + jedis.set("password", "mxz"));
System.out.println("系统中所有的键值对如下: ");
Set<String> keys = jedis.keys("*");
System.out.println(keys); System.out.println("删除键password: " + jedis.del("password"));
System.out.println("判断键password是否存在: " + jedis.exists("password"));
System.out.println("查看键username所存储值的类型: " + jedis.type("username"));
System.out.println("随机返回key空间的一个: " + jedis.randomKey());
System.out.println("重命名key: " + jedis.rename("username", "name"));
System.out.println("按索引查询: " + jedis.select(0));
System.out.println("删除当前选择数据库的所有的key: " + jedis.flushDB());
System.out.println("返回当前数据库中key的数目: " + jedis.dbSize());
System.out.println("删除所有数据库中的所有的key: " + jedis.flushAll());
}

输出

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.1) 2021-01-08 19:28:31.602 INFO 7492 --- [ main] cn.com.codincge.RedisApplicationTests : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 7492 (started by mxz in D:\mxz_code\codingce-java\codingce-redis\redis-01-jedis)
2021-01-08 19:28:31.608 INFO 7492 --- [ main] cn.com.codincge.RedisApplicationTests : No active profile set, falling back to default profiles: default
2021-01-08 19:28:32.290 INFO 7492 --- [ main] cn.com.codincge.RedisApplicationTests : Started RedisApplicationTests in 1.133 seconds (JVM running for 3.804) 清空数据OK
判断某个键是否存在: false
新增'<username, mxz>的键值对'OK
新增'<password, mxz>的键值对'OK
系统中所有的键值对如下:
[password, username]
删除键password: 1
判断键password是否存在: false
查看键username所存储值的类型: string
随机返回key空间的一个: username
重命名key: OK
按索引查询: OK
删除当前选择数据库的所有的key: OK
返回当前数据库中key的数目: 0
删除所有数据库中的所有的key: OK

String(字符串)

    @Test
void TestString() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
System.out.println("=====增加数据=====");
System.out.println(jedis.set("key1", "value1"));
System.out.println(jedis.set("key2", "value2"));
System.out.println(jedis.set("key3", "value3"));
System.out.println("删除键key2" + jedis.del("key2"));
System.out.println("获取键key2" + jedis.get("key2"));
System.out.println("修改key1" + jedis.set("key1", "valueChanged"));
System.out.println("获取key1的值" + jedis.get("key1"));
System.out.println("在key3后面加入值" + jedis.append("key3", "end"));
System.out.println("key3的值" + jedis.get("key3"));
System.out.println("增加多个键值对: " + jedis.mset("key01", "value01", "key02", "value02"));
System.out.println("获取多个键值对: " + jedis.mget("key01", "key02", "key03"));
System.out.println("获取多个键值对: " + jedis.mget("key01", "key02", "key03", "key04"));
System.out.println("删除多个键值对: " + jedis.del("key01", "key02"));
System.out.println("获取多个键值对: " + jedis.mget("key01", "key02", "key03")); jedis.flushDB();
System.out.println("=====新增键值对防止覆盖原先值=====");
System.out.println(jedis.setnx("key1", "value1"));
System.out.println(jedis.setnx("key2", "value2"));
System.out.println(jedis.setnx("key2", "value2-new"));
System.out.println(jedis.get("key1"));
System.out.println(jedis.get("key2")); System.out.println("=====新增键值对并设置有效时间=====");
System.out.println(jedis.setex("key3", 2, "value3"));
System.out.println(jedis.get("key3"));
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(jedis.get("key3")); System.out.println("=====获取原值, 更新为新值=====");
System.out.println(jedis.getSet("key2", "key2GetSet"));
System.out.println(jedis.get("key2")); System.out.println("获得key2的值字符串: " + jedis.getrange("key2", 2, 4));
}

输出


. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.1) 2021-01-09 09:56:23.763 INFO 9088 --- [ main] cn.com.codincge.RedisApplicationTests : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 9088 (started by mxz in D:\mxz_code\codingce-java\codingce-redis\redis-01-jedis)
2021-01-09 09:56:23.825 INFO 9088 --- [ main] cn.com.codincge.RedisApplicationTests : No active profile set, falling back to default profiles: default
2021-01-09 09:56:25.462 INFO 9088 --- [ main] cn.com.codincge.RedisApplicationTests : Started RedisApplicationTests in 2.349 seconds (JVM running for 5.252) =====增加数据=====
OK
OK
OK
删除键key21
获取键key2null
修改key1OK
获取key1的值valueChanged
在key3后面加入值9
key3的值value3end
增加多个键值对: OK
获取多个键值对: [value01, value02, null]
获取多个键值对: [value01, value02, null, null]
删除多个键值对: 2
获取多个键值对: [null, null, null]
=====新增键值对防止覆盖原先值=====
1
1
0
value1
value2
=====新增键值对并设置有效时间=====
OK
value3
null
=====获取原值, 更新为新值=====
value2
key2GetSet
获得key2的值字符串: y2G

List(列表)

    @Test
void TestList() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.flushDB(); System.out.println("=====添加一个List=====");
jedis.lpush("collections", "ArrayList", "Vector", "Stack", "HashMap", "WeakHashMap", "LinkedHashMap");
jedis.lpush("collections", "HashSet");
jedis.lpush("collections", "TreeSet");
jedis.lpush("collections", "TreeMap");
System.out.println("collections的内容" + jedis.lrange("collections", 0, -1));// -1代表倒数
System.out.println("collections区间 0-3 的元素: " + jedis.lrange("collections", 2, 3)); System.out.println("===========================================");
// 删除列表指定的值, 第二个参数为删除的个数(有重复时), 后add进去的值先被删, 类似于出栈
System.out.println("删除指定元素个数: " + jedis.lrem("collectionws", 2, "HashMap"));
System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
System.out.println("删除下表0-3区间之外的元素: " + jedis.ltrim("collections", 0, 3));
System.out.println("collections内容: " + jedis.lrange("collections", 0, -1));
System.out.println("collections列表出栈(左端): " + jedis.lpop("collections"));
System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
System.out.println("collections添加元素, 从列表右端, 与lpush相对应: " + jedis.rpush("collections", "test"));
System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
System.out.println("collections列表出栈(右端): " + jedis.rpop("collections"));
System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
System.out.println("collections指定下标 1 的内容: " + jedis.lset("collections", 1, "FLinkedHashMap"));
System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1)); System.out.println("===========================================");
System.out.println("collections的长度: " + jedis.llen("collections"));
System.out.println("获取collections下标为 2 的元素" + jedis.lindex("collections", 2));
System.out.println("===========================================");
jedis.lpush("sortedList", "3", "6", "2", "4", "5", "7", "9");
System.out.println("sortedList排序前: " + jedis.lrange("sortedList", 0, -1));
System.out.println(jedis.sort("sortedList"));
System.out.println("sortedList排序后:" + jedis.lrange("sortedList", 0, -1));
}

输出

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.1) 2021-01-09 10:43:37.900 INFO 12624 --- [ main] cn.com.codincge.RedisApplicationTests : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 12624 (started by mxz in D:\mxz_code\codingce-java\codingce-redis\redis-01-jedis)
2021-01-09 10:43:37.900 INFO 12624 --- [ main] cn.com.codincge.RedisApplicationTests : No active profile set, falling back to default profiles: default
2021-01-09 10:43:38.572 INFO 12624 --- [ main] cn.com.codincge.RedisApplicationTests : Started RedisApplicationTests in 0.997 seconds (JVM running for 2.26) =====添加一个List=====
collections的内容[TreeMap, TreeSet, HashSet, LinkedHashMap, WeakHashMap, HashMap, Stack, Vector, ArrayList]
collections区间 0-3 的元素: [HashSet, LinkedHashMap]
===========================================
删除指定元素个数: 0
collections的内容: [TreeMap, TreeSet, HashSet, LinkedHashMap, WeakHashMap, HashMap, Stack, Vector, ArrayList]
删除下表0-3区间之外的元素: OK
collections内容: [TreeMap, TreeSet, HashSet, LinkedHashMap]
collections列表出栈(左端): TreeMap
collections的内容: [TreeSet, HashSet, LinkedHashMap]
collections添加元素, 从列表右端, 与lpush相对应: 4
collections的内容: [TreeSet, HashSet, LinkedHashMap, test]
collections列表出栈(右端): test
collections的内容: [TreeSet, HashSet, LinkedHashMap]
collections指定下标 1 的内容: OK
collections的内容: [TreeSet, FLinkedHashMap, LinkedHashMap]
===========================================
collections的长度: 3
获取collections下标为 2 的元素LinkedHashMap
===========================================
sortedList排序前: [9, 7, 5, 4, 2, 6, 3]
[2, 3, 4, 5, 6, 7, 9]
sortedList排序后:[9, 7, 5, 4, 2, 6, 3]

Set(集合)

    @Test
void TestSet() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.flushDB();
System.out.println("======向集合中添加元素(不重复)======");
System.out.println(jedis.sadd("eleSet", "e0", "e1", "e2", "e3", "e4", "e5"));
System.out.println(jedis.sadd("eleSet", "e6"));
System.out.println(jedis.sadd("eleSet", "e6"));
System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
System.out.println("删除一个元素e0" + jedis.srem("eleSet", "e0"));
System.out.println("删除两个元素e6 e7" + jedis.srem("eleSet", "e7", "e6"));
System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
System.out.println("随机移除集合中的一个元素: " + jedis.spop("eleSet"));
System.out.println("随机移除集合中的一个元素: " + jedis.spop("eleSet"));
System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
System.out.println("eleSet中包含元素的个数: " + jedis.scard("eleSet"));
System.out.println("e3是否在eleSet中: " + jedis.sismember("eleSet", "e3"));
System.out.println("e1是否在eleSet中: " + jedis.sismember("eleSet", "e1"));
System.out.println("e5是否在eleSet中: " + jedis.sismember("eleSet", "e5"));
System.out.println("========================================");
System.out.println(jedis.sadd("eleSet1", "e0", "e1", "e2", "e3", "e4", "e5"));
System.out.println(jedis.sadd("eleSet2", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8"));
System.out.println("将eleSet1中删除e1并存入eleSet3中: " + jedis.smove("eleSet1", "eleSet3", "e1"));
System.out.println("将eleSet2中删除e2并存入eleSet3中: " + jedis.smove("eleSet2", "eleSet3", "e2"));
System.out.println("eleSet1中的元素: " + jedis.smembers("eleSet1"));
System.out.println("eleSet2中的元素: " + jedis.smembers("eleSet2"));
System.out.println("=====集合运算=====");
System.out.println("eleSet1中的元素: " + jedis.smembers("eleSet1"));
System.out.println("eleSet2中的元素: " + jedis.smembers("eleSet2"));
System.out.println("eleSet1和eleSet2的交集" + jedis.sinter("eleSet1", "eleSet2"));
System.out.println("eleSet1和eleSet2的并集" + jedis.sunion("eleSet1", "eleSet2"));
System.out.println("eleSet1和eleSet2的差集" + jedis.sdiff("eleSet1", "eleSet2")); //eleSet1中有, EleSet2中没有
jedis.sinterstore("eleSet4", "eleSet1", "eleSet2"); //求交集并将交集保存到 dstkey的集合
System.out.println("eleSet4中的元素: " + jedis.smembers("eleSet4"));
}

输出

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.1) 2021-01-09 11:25:15.843 INFO 6516 --- [ main] cn.com.codincge.RedisApplicationTests : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 6516 (started by mxz in D:\mxz_code\codingce-java\codingce-redis\redis-01-jedis)
2021-01-09 11:25:15.843 INFO 6516 --- [ main] cn.com.codincge.RedisApplicationTests : No active profile set, falling back to default profiles: default
2021-01-09 11:25:16.718 INFO 6516 --- [ main] cn.com.codincge.RedisApplicationTests : Started RedisApplicationTests in 1.207 seconds (JVM running for 2.739) ======向集合中添加元素(不重复)======
6
1
0
eleSet的所有元素为: [e5, e1, e0, e2, e3, e6, e4]
删除一个元素e01
删除两个元素e6 e71
eleSet的所有元素为: [e5, e1, e2, e3, e4]
随机移除集合中的一个元素: e5
随机移除集合中的一个元素: e2
eleSet的所有元素为: [e1, e3, e4]
eleSet中包含元素的个数: 3
e3是否在eleSet中: true
e1是否在eleSet中: true
e5是否在eleSet中: false
========================================
6
9
将eleSet1中删除e1并存入eleSet3中: 1
将eleSet2中删除e2并存入eleSet3中: 1
eleSet1中的元素: [e3, e5, e0, e2, e4]
eleSet2中的元素: [e1, e0, e3, e6, e4, e8, e5, e7]
=====集合运算=====
eleSet1中的元素: [e3, e5, e0, e2, e4]
eleSet2中的元素: [e1, e0, e3, e6, e4, e8, e5, e7]
eleSet1和eleSet2的交集[e3, e5, e0, e4]
eleSet1和eleSet2的并集[e7, e5, e1, e0, e8, e2, e3, e4, e6]
eleSet1和eleSet2的差集[e2]
eleSet4中的元素: [e0, e5, e4, e3]

Hash(哈希)

    @Test
void TestHash() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.flushDB();
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.put("key4", "value4");
//添加名称为hash(key) 的hash元素
jedis.hmset("hash", map);
//向名称为hash的hash中添加key为key5, value为value5的元素
jedis.hset("hash", "key5", "value5");
System.out.println("散列hash的所有键值对为: " + jedis.hgetAll("hash"));
System.out.println("散列hash的所有的键为: " + jedis.hkeys("hash")); //return Set<String>
System.out.println("散列hash的所有的值为: " + jedis.hvals("hash")); //return List<String>
System.out.println("将key6保存的值加上一个整数, 如果key6不存在则添加key6: " + jedis.hincrBy("hash", "key6", 1));
System.out.println("散列hash的所有键值对为: " + jedis.hgetAll("hash"));
System.out.println("将key6保存的值加上一个整数, 如果key6不存在则添加key6: " + jedis.hincrByFloat("hash", "key6", 1.0));
System.out.println("散列hash的所有键值对为: " + jedis.hgetAll("hash"));
System.out.println("删除一个或多个键值对: " + jedis.hdel("hash", "key2"));
System.out.println("散列hash的所有键值对为: " + jedis.hgetAll("hash"));
System.out.println("散列hash的所有键值对个数: " + jedis.hlen("hash"));
System.out.println("判断散列hash中是否存在key2: " + jedis.hexists("hash", "key2"));
System.out.println("判断散列hash中是否存在key3: " + jedis.hexists("hash", "key3"));
System.out.println("获取hash中的值: " + jedis.hmget("hash", "key3"));
System.out.println("获取hash中的值: " + jedis.hmget("hash", "key3", "key4"));
}

输出

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.1) 2021-01-09 13:27:34.237 INFO 11788 --- [ main] cn.com.codincge.RedisApplicationTests : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 11788 (started by mxz in D:\mxz_code\codingce-java\codingce-redis\redis-01-jedis)
2021-01-09 13:27:34.242 INFO 11788 --- [ main] cn.com.codincge.RedisApplicationTests : No active profile set, falling back to default profiles: default
2021-01-09 13:27:35.059 INFO 11788 --- [ main] cn.com.codincge.RedisApplicationTests : Started RedisApplicationTests in 1.276 seconds (JVM running for 3.17) 散列hash的所有键值对为: {key1=value1, key2=value2, key5=value5, key3=value3, key4=value4}
散列hash的所有的键为: [key1, key2, key5, key3, key4]
散列hash的所有的值为: [value1, value3, value4, value2, value5]
将key6保存的值加上一个整数, 如果key6不存在则添加key6: 1
散列hash的所有键值对为: {key1=value1, key2=value2, key5=value5, key6=1, key3=value3, key4=value4}
将key6保存的值加上一个整数, 如果key6不存在则添加key6: 2.0
散列hash的所有键值对为: {key1=value1, key2=value2, key5=value5, key6=2, key3=value3, key4=value4}
删除一个或多个键值对: 1
散列hash的所有键值对为: {key1=value1, key5=value5, key6=2, key3=value3, key4=value4}
散列hash的所有键值对个数: 5
判断散列hash中是否存在key2: false
判断散列hash中是否存在key3: true
获取hash中的值: [value3]
获取hash中的值: [value3, value4]

项目地址 https://github.com/xzMhehe/codingce-java

Jedis基础详解的更多相关文章

  1. Dom探索之基础详解

    认识DOM DOM级别 注::DOM 0级标准实际并不存在,只是历史坐标系的一个参照点而已,具体的说,它指IE4.0和Netscape Navigator4.0最初支持的DHTML. 节点类型 注:1 ...

  2. Android中Canvas绘图基础详解(附源码下载) (转)

    Android中Canvas绘图基础详解(附源码下载) 原文链接  http://blog.csdn.net/iispring/article/details/49770651   AndroidCa ...

  3. javaScript基础详解(1)

    javaScript基础详解 首先讲javaScript的摆放位置:<script> 与 </script> 可以放在head和body之间,也可以body中或者head中 J ...

  4. Python学习一:序列基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...

  5. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  6. 深入浅出DOM基础——《DOM探索之基础详解篇》学习笔记

    来源于:https://github.com/jawil/blog/issues/9 之前通过深入学习DOM的相关知识,看了慕课网DOM探索之基础详解篇这个视频(在最近看第三遍的时候,准备记录一点东西 ...

  7. 三剑客基础详解(grep、sed、awk)

    目录 三剑客基础详解 三剑客之grep详解 1.通配符 2.基础正则 3.grep 讲解 4.拓展正则 5.POSIX字符类 三剑客之sed讲解 1.sed的执行流程 2.语法格式 三剑客之Awk 1 ...

  8. java继承基础详解

    java继承基础详解 继承是一种由已存在的类型创建一个或多个子类的机制,即在现有类的基础上构建子类. 在java中使用关键字extends表示继承关系. 基本语法结构: 访问控制符 class 子类名 ...

  9. java封装基础详解

    java封装基础详解 java的封装性即是信息隐藏,把对象的属性和行为结合成一个相同的独立单体,并尽可能地隐藏对象的内部细节. 封装的特性是对属性来讲的. 封装的目标就是要实现软件部件的"高 ...

随机推荐

  1. 浅析MyBatis(一):由一个快速案例剖析MyBatis的整体架构与运行流程

    MyBatis 是轻量级的 Java 持久层中间件,完全基于 JDBC 实现持久化的数据访问,支持以 xml 和注解的形式进行配置,能灵活.简单地进行 SQL 映射,也提供了比 JDBC 更丰富的结果 ...

  2. Jmeter(三十八) - 从入门到精通进阶篇 - 命令行运行JMeter详解(详解教程)

    1.简介 前边一篇文章介绍了如何生成测试报告,细心地小伙伴或者同学们可以看到宏哥启动Jmeter生成测试报告不是在gui页面操作的,而是在gui页面设置好保存以后,用命令行来生成测试报告的.这一篇宏哥 ...

  3. 【故障公告】阿里云 RDS SQL Server 数据库实例 CPU 100% 引发全站故障

    非常抱歉,今天 8:48 开始,我们使用的阿里云 RDS SQL Server 数据库实例突然出现 CPU 100%  问题,引发全站故障,由此给您带来麻烦,请您谅解. 发现故障后立即进行主备切换,和 ...

  4. PReact10.5.13源码理解

    React源码看过几次,每次都没有坚持下来,索性学习一下PReact部分,网上讲解源码的不少,但是基本已经过时,所以自己来梳理下 render.js部分 import { EMPTY_OBJ, EMP ...

  5. Python基础之:Python中的内部对象

    目录 简介 内置函数 内置常量 内置类型 逻辑值检测 逻辑值的布尔运算 比较运算 数字类型 整数类型的位运算 整数类型的附加方法 浮点类型的附加方法 迭代器 序列类型 集合类型 映射类型 字典视图对象 ...

  6. 扩展中国剩余定理(EXCRT)学习笔记

    扩展中国剩余定理(EXCRT)学习笔记 用途 求解同余方程组 \(\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2} ...

  7. 仿VUE创建响应式数据

    VUE对于前端开发人员都非常熟悉了,其工作原理估计也都能说的清个大概,具体代码的实现估计看的人不会太多,这里对vue响应式数据做个简单的实现. 先简单介绍一下VUE数据响应原理,VUE响应数据分为对象 ...

  8. Run Horovod

    Run Horovod https://horovod.readthedocs.io/en/stable/running_include.html https://horovod.readthedoc ...

  9. 3. Mybatis Insert

    案例: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC &qu ...

  10. nginx+nginx-upsync-module实现配置动态更新

    模块微博开源:https://github.com/weibocom/nginx-upsync-module#upsync 实现方案: nginx+consul nginx+etcd Installa ...