• 【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis


    1 Java 使用 Redis

    1.1 方案简述

            redis的java客户端很多,官方推荐的有三种:

    1. Jedis
    2. Lettuce
    3. Redisson
    4. Spring 对Redis 客户端进行了整合,提供了Spring Date Redis ,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis。

    1.2 使用Jedis连接到 redis 服务

            使用Jedis操作Redis的步骤:

    1.获取链接;

    2.执行操作;

    3.关闭连接;

    1.2.1 实例

    1. import redis.clients.jedis.Jedis;
    2. public class RedisJava {
    3. public static void main(String[] args) {
    4. //连接本地的 Redis 服务
    5. Jedis jedis = new Jedis("localhost");
    6. // 如果 Redis 服务设置了密码,需要下面这行,没有就不需要
    7. // jedis.auth("123456");
    8. System.out.println("连接成功");
    9. //查看服务是否运行
    10. System.out.println("服务正在运行: "+jedis.ping());
    11. }
    12. }

            编译以上 Java 程序,确保驱动包的路径是正确的。

    1. 连接成功
    2. 服务正在运行: PONG

    1.2.2 Redis Java String(字符串) 实例

    1. import redis.clients.jedis.Jedis;
    2. public class RedisStringJava {
    3. public static void main(String[] args) {
    4. //连接本地的 Redis 服务
    5. Jedis jedis = new Jedis("localhost");
    6. System.out.println("连接成功");
    7. //设置 redis 字符串数据
    8. jedis.set("runoobkey", "www.runoob.com");
    9. // 获取存储的数据并输出
    10. System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
    11. }
    12. }

            编译以上程序。

    1. 连接成功 redis
    2. 存储的字符串为: www.runoob.com

    1.2.3 Redis Java List(列表) 实例

    1. import java.util.List;
    2. import redis.clients.jedis.Jedis;
    3. public class RedisListJava {
    4. public static void main(String[] args) {
    5. //连接本地的 Redis 服务
    6. Jedis jedis = new Jedis("localhost");
    7. System.out.println("连接成功");
    8. //存储数据到列表中
    9. jedis.lpush("site-list", "Runoob");
    10. jedis.lpush("site-list", "Google");
    11. jedis.lpush("site-list", "Taobao");
    12. // 获取存储的数据并输出
    13. List list = jedis.lrange("site-list", 0 ,2);
    14. for(int i=0; i
    15. System.out.println("列表项为: "+list.get(i));
    16. }
    17. }
    18. }

            编译以上程序。

    1. 连接成功
    2. 列表项为: Taobao
    3. 列表项为: Google
    4. 列表项为: Runoob

    1.2.4 Redis Java Keys 实例

    1. import java.util.Iterator;
    2. import java.util.Set;
    3. import redis.clients.jedis.Jedis;
    4. public class RedisKeyJava {
    5. public static void main(String[] args) {
    6. //连接本地的 Redis 服务
    7. Jedis jedis = new Jedis("localhost");
    8. System.out.println("连接成功");
    9. // 获取数据并输出
    10. Set keys = jedis.keys("*");
    11. Iterator it=keys.iterator() ;
    12. while(it.hasNext()){
    13. String key = it.next();
    14. System.out.println(key);
    15. }
    16. }
    17. }

            编译以上程序。

    1. 连接成功
    2. runoobkey site-list

    1.3 Lettuce

            另一个流行的Java Redis客户端库Lettuce,它具有异步和响应式API,支持集群模式、Sentinel模式以及Redis 6中的新特性。以下是使用Lettuce连接Redis并执行一些基本操作的代码示例:

            在上面的代码中,我们使用了Lettuce客户端库来连接Redis服务器并执行一些基本操作。首先,我们创建了一个RedisClient实例,并将Redis服务器的地址和端口作为参数传递给create方法。然后,我们通过调用connect方法来创建一个StatefulRedisConnection实例,该实例提供了同步和异步的API来操作Redis。接下来,我们使用sync方法来获取一个同步的RedisCommands实例,然后使用set方法来设置一个键值对,get方法获取一个键的值,del方法删除一个键。最后,我们关闭了连接哦。

    1.4 Redisson

            Redisson是一个基于Netty框架的Java Redis客户端库,它提供了分布式锁、分布式集合、分布式对象等功能,支持Redis集群和Sentinel模式。以下是使用Redisson连接Redis并执行一些基本操作的代码示例:

            在上面的代码中,我们使用了Redisson客户端库来连接Redis服务器并执行一些基本操作。首先,我们创建了一个Config实例,并使用useSingleServer方法来指定Redis服务器的地址和端口。然后,我们通过调用create方法来创建一个RedissonClient实例。接下来,我们使用getBucket方法来获取一个RBucket实例,该实例可以用来操作一个特定的键。我们使用set方法来设置一个键值对,get方法获取一个键的值,delete方法删除一个键。最后,我们关闭了连接。

    1.5 Spring Data Redis

            Spring Data Redis 中提供了一个高度封装的类,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

    • ValueOperations:简单K-V操作
    • SetOperations :set 类型数据操作
    • ZSetOperations:zset 类型数据操作
    • HashOperations:针对map类型的数据操作
    • ListOperations:针对list类型的数据操作

            默认操作的是0号数据库,也可以切换其他数据库:

            设置一下序列化,这样设置key的时候不会变成乱码:

    1. package com.example.demotest;
    2. import org.springframework.cache.annotation.CachingConfigurerSupport;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.Configuration;
    5. import org.springframework.data.redis.connection.RedisConnectionFactory;
    6. import org.springframework.data.redis.core.RedisTemplate;
    7. import org.springframework.data.redis.serializer.StringRedisSerializer;
    8. @Configuration
    9. public class RedisConfig extends CachingConfigurerSupport {
    10. @Bean
    11. public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){
    12. RedisTemplate redisTemplate = new RedisTemplate<>();
    13. redisTemplate.setKeySerializer(new StringRedisSerializer());
    14. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    15. redisTemplate.setConnectionFactory(connectionFactory);
    16. return redisTemplate;
    17. }
    18. }
    1. package com.example.demotest;
    2. import org.junit.Test;
    3. import org.junit.runner.RunWith;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.boot.test.context.SpringBootTest;
    6. import org.springframework.data.redis.connection.DataType;
    7. import org.springframework.data.redis.core.*;
    8. import org.springframework.test.context.junit4.SpringRunner;
    9. import java.util.List;
    10. import java.util.Set;
    11. import java.util.concurrent.TimeUnit;
    12. @SpringBootTest
    13. @RunWith(SpringRunner.class)
    14. public class SpringDataRedisTest {
    15. @Autowired
    16. private RedisTemplate redisTemplate;
    17. @Test
    18. public void testString(){
    19. redisTemplate.opsForValue().set("city2","sz");
    20. String city2 = (String) redisTemplate.opsForValue().get("city2");
    21. System.out.println("打印一下" + city2);
    22. //指定过期时间 10 秒
    23. redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
    24. //如果不存在key则设置
    25. Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "sz");
    26. System.out.println(aBoolean);
    27. }
    28. @Test
    29. public void testHash(){
    30. HashOperations hashOperations = redisTemplate.opsForHash();
    31. //存值
    32. hashOperations.put("002","name","hh");
    33. hashOperations.put("002","age","20");
    34. hashOperations.put("002","address","sz");
    35. //取值
    36. String age = (String) hashOperations.get("002", "age");
    37. System.out.println(age);
    38. //获得hash结构中的所有字段
    39. Set keys = hashOperations.keys("002");
    40. for (Object key : keys) {
    41. System.out.println(key);
    42. }
    43. //获得hash结构中的所有值
    44. List values = hashOperations.values("002");
    45. for (Object value : values) {
    46. System.out.println(value);
    47. }
    48. }
    49. /**
    50. * 操作list类型的数据
    51. */
    52. @Test
    53. public void testList(){
    54. ListOperations listOperations = redisTemplate.opsForList();
    55. //存储
    56. listOperations.leftPush("mylist","a");
    57. listOperations.leftPushAll("mylist","b","c","d");
    58. //取值
    59. List mylist = listOperations.range("mylist", 0, -1);
    60. for (String value : mylist) {
    61. System.out.println(value);
    62. }
    63. //获得列表长度
    64. Long size = listOperations.size("mylist");
    65. int lSize = size.intValue();
    66. for (int i = 0; i < lSize; i++) {
    67. //出队列
    68. String elment = (String) listOperations.rightPop("mylist");
    69. System.out.println(elment);
    70. }
    71. }
    72. /**
    73. * 操作set类型的数据
    74. */
    75. @Test
    76. public void testSet(){
    77. SetOperations setOperations = redisTemplate.opsForSet();
    78. //存值
    79. setOperations.add("myset","a","b","c","a");
    80. //取值
    81. Set myset = setOperations.members("myset");
    82. for (String s : myset) {
    83. System.out.println(s);
    84. }
    85. //删除成员
    86. setOperations.remove("myset","a","b");
    87. //取值
    88. myset = setOperations.members("myset");
    89. for (String s : myset) {
    90. System.out.println(s);
    91. }
    92. }
    93. /**
    94. * 操作zset类型的数据
    95. */
    96. @Test
    97. public void testZset(){
    98. ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    99. //存值
    100. zSetOperations.add("myZset","a",10.0);
    101. zSetOperations.add("myZset","b",11.0);
    102. zSetOperations.add("myZset","d",12.0);
    103. zSetOperations.add("myZset","a",13.0);
    104. //取值
    105. Set myZset = zSetOperations.range("myZset", 0, -1);
    106. for (String s : myZset) {
    107. System.out.println(s);
    108. }
    109. //修改分数
    110. zSetOperations.incrementScore("myZset","b",20.0);
    111. //取值
    112. myZset = zSetOperations.range("myZset", 0, -1);
    113. for (String s : myZset) {
    114. System.out.println(s);
    115. }
    116. //删除成员
    117. zSetOperations.remove("myZset","a","b");
    118. }
    119. @Test
    120. public void testCommon(){
    121. //获取Redis 中所有的key
    122. Set keys = redisTemplate.keys("*");
    123. for (String key : keys) {
    124. System.out.println(key);
    125. }
    126. //判断某个key是否存在
    127. Boolean hh = redisTemplate.hasKey("hh");
    128. System.out.println(hh);
    129. //删除指定key
    130. redisTemplate.delete("myzset");
    131. //获取指定key对应的value的数据类型
    132. DataType dataType = redisTemplate.type("myset");
    133. System.out.println(dataType.name());
    134. }
    135. }

     参考链接

    Java 使用 Redis | 菜鸟教程

    java在项目中如何使用redis_Redis_方法_操作

    在Java中操作Redis_java redis_周盛欢的博客-CSDN博客

    使用java操作redis_java连接redis_白未的博客-CSDN博客

    Redis在java项目中的使用

  • 相关阅读:
    AIGC+思维导图:提升你的学习与工作效率的「神器」
    基于Python+Tkinter实现一个贪食蛇小游戏
    t-SNE可视化-Python实现
    C#里如何简单的校验时间格式
    “空间代谢组学“用于食管鳞状细胞癌早期筛查的研究
    【JavaEE】Servlet API 详解(HttpServletResponse类方法演示、实现自动刷新、实现自动重定向)
    头歌-信息安全技术-用Python实现自己的区块链、支持以太坊的云笔记服务器端开发、编写并测试用于保存云笔记的智能合约、支持以太坊的云笔记小程序开发基础
    Anacoda的用途
    Visual C++ 2010开发的程序在其它电脑上运行提示“找不到MSVCR100D.dll”原因及解决
    win11安装双系统Ubuntu的坎坷记录
  • 原文地址:https://blog.csdn.net/junbaozi/article/details/132721873