@@ -244,3 +244,170 @@ false
244
244
使用管道耗时:28ms
245
245
```
246
246
** 通过以上例子,可以看到,如果需要大批量的向Redis服务器读写数据,那么建议采用管道的方式提升性能。**
247
+
248
+ ### 2. Java操作各种Redis数据类型
249
+ #### 读写列表类对象
250
+ ``` java
251
+ public static void main(String [] args) {
252
+ listDemo();
253
+ }
254
+
255
+ /**
256
+ * List数据结构演示
257
+ * 该方法用于演示如何使用Jedis操作List数据结构,包括插入和查询操作
258
+ */
259
+ private static void listDemo() {
260
+ // 创建Jedis对象,连接本地Redis服务器
261
+ Jedis jedis = new Jedis (" localhost" , 6379 );
262
+
263
+ // 向List的尾部添加元素
264
+ jedis. rpush(" 001" , " Peter" );
265
+ jedis. rpush(" 001" , " 15" );
266
+ jedis. rpush(" 001" , " Male" );
267
+
268
+ // 检查Key是否存在
269
+ if (jedis. exists(" 001" )) {
270
+ // 如果Key存在,打印List中的每个元素
271
+ System . out. println(jedis. lindex(" 001" , 0 ));
272
+ System . out. println(jedis. lindex(" 001" , 1 ));
273
+ System . out. println(jedis. lindex(" 001" , 2 ));
274
+ } else {
275
+ // 如果Key不存在,打印提示信息
276
+ System . out. println(" Key does not exist,get from db" );
277
+ }
278
+ }
279
+ // 运行程序,输出结果如下:
280
+ Peter
281
+ 15
282
+ Male
283
+ ```
284
+
285
+ #### 2.读写哈希表对象
286
+ > 如果待缓存对象的属性个数很多,就建议用哈希表对象来缓存:一方面,在哈希表中是用属性名称来定位数据的,而不是属性的顺序;另一方面,哪怕没存若干属性,也不会影响对该对象的读取,顶多就是读取的属性值为空。
287
+
288
+ ``` java
289
+ /**
290
+ * 示例如何使用Jedis操作Hash数据类型
291
+ * 该方法连接到本地的Redis服务器,使用HSET命令向两个员工ID(Emp002和Emp003)添加信息,
292
+ * 并使用HGET命令获取这些信息
293
+ */
294
+ static void hashDemo() {
295
+ // 创建Jedis实例,连接到本地Redis服务器
296
+ Jedis jedis = new Jedis (" localhost" , 6379 );
297
+
298
+ // 向Emp002这个Hash中设置name、age和gender字段
299
+ jedis. hset(" Emp002" , " name" , " Peter" );
300
+ jedis. hset(" Emp002" , " age" , " 15" );
301
+ jedis. hset(" Emp002" , " gender" , " Male" );
302
+
303
+ // 获取并打印Emp002的name和age字段
304
+ System . out. println(jedis. hget(" Emp002" , " name" ));
305
+ System . out. println(jedis. hget(" Emp002" , " age" ));
306
+
307
+ // 使用Map封装Emp003的信息,然后一次性设置到Redis中
308
+ Map<String , String > emp03 = new HashMap<> ();
309
+ emp03. put(" name" , " farb" );
310
+ emp03. put(" age" , " 18" );
311
+ emp03. put(" gender" , " Male" );
312
+ jedis. hset(" Emp003" , emp03);
313
+
314
+ // 再次获取并打印Emp002和Emp003的name字段,展示数据一致性
315
+ System . out. println(jedis. hget(" Emp002" , " name" ));
316
+ System . out. println(jedis. hget(" Emp002" , " age" ));
317
+ }
318
+ // 运行程序,输出结果如下:
319
+ Peter
320
+ 15
321
+ farb
322
+ 18
323
+ ```
324
+
325
+ #### 3.读写集合对象
326
+ > 一般项目中,大多使用Redis的字符串,列表和哈希表来缓存数据,而集合对象一般用于去重的场景。
327
+
328
+ ``` java
329
+ /**
330
+ * 使用Jedis操作Redis的Set数据结构的演示方法
331
+ * 该方法展示了如何向Set中添加元素,并打印出Set中的所有元素
332
+ */
333
+ static void setDemo() {
334
+ // 创建Jedis对象,连接本地的Redis服务器
335
+ Jedis jedis = new Jedis (" localhost" , 6379 );
336
+ // 向Set“bonusId”中添加元素“1”、“2”、“3”、“4”、“1”,注意重复元素会被忽略
337
+ jedis. sadd(" bonusId" , " 1" , " 2" , " 3" , " 4" , " 1" );
338
+ // 打印Set“bonusId”中的所有元素
339
+ System . out. println(jedis. smembers(" bonusId" ));
340
+ }
341
+ // 运行程序,输出结果如下:
342
+ [1 , 2 , 3 , 4 ]
343
+ ```
344
+
345
+ #### 4.读写有序集合对象
346
+
347
+ ``` java
348
+ /**
349
+ * 示范使用Sorted Set数据结构的操作
350
+ * 该方法主要展示了如何在Redis中使用Jedis操作Sorted Set,包括添加成员和获取排序范围
351
+ */
352
+ static void sortedSetDemo() {
353
+ // 创建Jedis对象,连接本地的Redis服务器
354
+ Jedis jedis = new Jedis (" localhost" , 6379 );
355
+ // 向Sorted Set "emps"中添加成员"Peter",分数为1.0
356
+ jedis. zadd(" emps" , 1.0 , " Peter" );
357
+ // 向Sorted Set "emps"中添加成员"Jane",分数为3.0
358
+ jedis. zadd(" emps" , 3.0 , " Jane" );
359
+ // 向Sorted Set "emps"中添加成员"Mike",分数为2.0
360
+ jedis. zadd(" emps" , 2.0 , " Mike" );
361
+ // 打印Sorted Set "emps"中所有成员,验证添加操作的结果
362
+ System . out. println(jedis. zrange(" emps" , 0 , - 1 ));
363
+
364
+ // 根据分数范围查询并打印Sorted Set "emps"中的成员及其分数,分数范围为2.0到3.0
365
+ System . out. println(jedis. zrangeByScoreWithScores(" emps" , 2.0 , 3.0 ));
366
+ }
367
+ // 运行程序,输出结果如下:
368
+ [Peter , Mike , Jane ]
369
+ [[Mike ,2.0 ], [Jane ,3.0 ]]
370
+ ```
371
+
372
+ #### 5.操作地理位置数据
373
+
374
+ ``` java
375
+ /**
376
+ * 地理位置演示函数
377
+ * 该函数演示了如何使用Jedis操作Redis中的地理位置数据
378
+ * 主要包括添加地理位置数据、获取位置信息、查询一定半径内的地理位置以及计算两点间的距离
379
+ */
380
+ static void geoDemo() {
381
+ // 创建Jedis对象,连接本地的Redis服务器
382
+ Jedis jedis = new Jedis (" localhost" , 6379 );
383
+
384
+ // 向Redis中添加地理位置数据,包括经度、纬度和位置标识
385
+ jedis. geoadd(" geo" , 120.52 , 30.40 , " pos1" );
386
+ jedis. geoadd(" geo" , 120.52 , 31.53 , " pos2" );
387
+ jedis. geoadd(" geo" , 122.12 , 30.40 , " pos3" );
388
+ jedis. geoadd(" geo" , 122.12 , 31.53 , " pos4" );
389
+
390
+ // 打印所有位置的地理坐标
391
+ System . out. println(jedis. geopos(" geo" , " pos1" , " pos2" , " pos3" , " pos4" ));
392
+
393
+ // 查询以给定经纬度为中心,指定半径内的地理位置
394
+ List<GeoRadiusResponse > geoList = jedis. georadius(" geo" , 120.52 , 30.40 , 200 , GeoUnit . KM );
395
+ for (GeoRadiusResponse res : geoList) {
396
+ // 打印查询到的地理位置
397
+ System . out. println(res. getMemberByString());
398
+ }
399
+
400
+ // 计算两个地理位置之间的距离
401
+ Double distance = jedis. geodist(" geo" , " pos1" , " pos2" , GeoUnit . KM );
402
+ // 打印计算得到的距离
403
+ System . out. println(distance);
404
+ }
405
+ // 运行程序,输出结果如下:
406
+ [(120.5200007557869 ,30.399999526689975 ), (120.5200007557869 ,31.530001032013715 ), (122.11999744176865 ,30.399999526689975 ), (122.11999744176865 ,31.530001032013715 )]
407
+ pos1
408
+ pos2
409
+ pos3
410
+ pos4
411
+ 125.6859
412
+
413
+ ```
0 commit comments