Jedis基础详解
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]
Jedis基础详解的更多相关文章
- Dom探索之基础详解
认识DOM DOM级别 注::DOM 0级标准实际并不存在,只是历史坐标系的一个参照点而已,具体的说,它指IE4.0和Netscape Navigator4.0最初支持的DHTML. 节点类型 注:1 ...
- Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
- javaScript基础详解(1)
javaScript基础详解 首先讲javaScript的摆放位置:<script> 与 </script> 可以放在head和body之间,也可以body中或者head中 J ...
- Python学习一:序列基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
- 深入浅出DOM基础——《DOM探索之基础详解篇》学习笔记
来源于:https://github.com/jawil/blog/issues/9 之前通过深入学习DOM的相关知识,看了慕课网DOM探索之基础详解篇这个视频(在最近看第三遍的时候,准备记录一点东西 ...
- 三剑客基础详解(grep、sed、awk)
目录 三剑客基础详解 三剑客之grep详解 1.通配符 2.基础正则 3.grep 讲解 4.拓展正则 5.POSIX字符类 三剑客之sed讲解 1.sed的执行流程 2.语法格式 三剑客之Awk 1 ...
- java继承基础详解
java继承基础详解 继承是一种由已存在的类型创建一个或多个子类的机制,即在现有类的基础上构建子类. 在java中使用关键字extends表示继承关系. 基本语法结构: 访问控制符 class 子类名 ...
- java封装基础详解
java封装基础详解 java的封装性即是信息隐藏,把对象的属性和行为结合成一个相同的独立单体,并尽可能地隐藏对象的内部细节. 封装的特性是对属性来讲的. 封装的目标就是要实现软件部件的"高 ...
随机推荐
- 从Android手机的抢红包插件说起
前语 最近,Android手机上的手机管家更新了新版本,提供了红包闹钟功能,只要有微信红包或者QQ红包,就会自动提醒.恰逢最近又在做UI自动化的工作,使用到UI Automator框架.几行代码,就可 ...
- Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?
Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了6.0的版本,在新版本中采用了多线程模型. 因为我们公司使用的内存数据库是自研的,按理说我对Redi ...
- Linux tar 使用笔记
常用语法 打包和压缩包 仅打包不压缩:tar -cvf usr.tar /usr 将 /usr 目录打包为 usr.tar 打包并以 gz 格式压缩:tar -czvf usr.tar.gz /usr ...
- 攻防世界 reverse crazy
crazy 百越杯2018 查看main函数: int __cdecl main(int argc, const char **argv, const char **envp) { __int64 v ...
- 前瞻|Amundsen的数据血缘功能
目前,Amundsen并不支持表级别和列级别的数据血缘功能,也没有办法展示数据的来龙去脉. 作为Amundsen一项非常核心的功能,Lineage功能早已经提上日程,并进入设计与研发阶段.本位将展示此 ...
- Azure Front Door(三)启用 Web Application Firewall (WAF) 保护Web 应用程序,拒绝恶意攻击
一,引言 上一篇我们利用 Azure Front Door 为后端 VM 部署提供流量的负载均衡.因为是演示实例,也没有实际的后端实例代码,只有一个 "Index.html" 的静 ...
- 用 Go + WebSocket 快速实现一个 chat 服务
前言 在 go-zero 开源之后,非常多的用户询问是否可以支持以及什么时候支持 websocket,终于在 v1.1.6 里面我们从框架层面让 websocket 的支持落地了,下面我们就以 cha ...
- 201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接☛ 班级博客 这个作业要求链接☛ 作业要求 我的课程学习目标☛ 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming).2. 掌握Github ...
- Windows系统搭建ELK日志收集服务器
一.ELK是什么?ELK是由Elasticsearch.Logstash.Kibana这3个软件的首字母缩写. Elasticsearch是一个分布式搜索分析引擎,稳定.可水平扩展.易于管理是它的主要 ...
- nginx配置实例及多服务器负载
目录 nginx配置实例 多服务器负载 nginx配置实例 nginx.conf worker_processes 1; events { worker_connections 1024; } htt ...