Redis整合jedis 学习

今天药忘吃喽~ 2023-10-12 16:13 169阅读 0赞

前言

redis简单来讲是内存数据库,因为是将数据存放到内存,因此读写速率高快(传统数据库,不是先从内存转到硬存,慢)

1.jedis连接Redis

redis是java操作redis的客户端,通过他我们能通过java语句操控redis。

jedis对于redis,相对于jdbc对于mysql。(底层)

1.1 jedis连接redis

  1. 本笔记采用,md由于底层几乎没人用,因此导入springboot依赖,外加springboot整合redis依赖即可。
  2. springboot1.0x 默认采用的连接池技术是jedis
  3. 2.0 以上版本连接池是Lettuce
  4. <dependency>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-data-redis</artifactId>
  7. <exclusions>
  8. <exclusion>
  9. <groupId>io.lettuce</groupId>
  10. <artifactId>lettuce-core</artifactId>
  11. </exclusion>
  12. </exclusions>
  13. </dependency>
  14. <!--jedis依赖 -->
  15. <dependency>
  16. <groupId>redis.clients</groupId>
  17. <artifactId>jedis</artifactId>
  18. </dependency>
  19. Jedis jedis = new Jedis("192.168.88.135",6379);
  20. // 设置认证密码
  21. jedis.auth("123456");
  22. // 选择数据库
  23. jedis.select(0);
  24. System.out.println(jedis.ping());
  25. // 设置string键值
  26. jedis.set("name","qhx");
  27. String name = jedis.get("name");
  28. if (jedis != null){
  29. jedis.close();
  30. }

看的出,穿件jedis对象之后,发现他默认封装的方法api就是redis的指令。

1.2 jedis连接池连接Redis

看的出跟mysql数据库连接池一样。

1.创建 数据库连接池对象,封装jedisconfig配置,以及数据库密码,端口号、redisIP

2.由数据库连接池对象创建数据库对象

PS:由jedisPool创建jedis对象,不能设置密码,ip之类的。

  1. // 初始化jedis连接池对象
  2. JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "192.168.88.135", 6379, 10000, "123456");
  3. // 从数据库连接器获取redis对象
  4. Jedis jedis = jedisPool.getResource();
  5. jedis.select(2);
  6. // 使用ping命令测试连接成功
  7. System.out.println(jedis.ping());
  8. jedis.set("name","qhx");
  9. jedis.get("name");
  10. if(jedis !=null){
  11. jedis.close();
  12. jedisPool.close();
  13. }

1.3 将Jedis对象交给spring管控

理解Mysql一样,就是将数据库连接池,你肯定要连接一次吧?创建多次数据库连接池,浪费资源。就是静态实例,你是由一个数据库连接池对象,能创建多个数据库连接对象。

那就是把他封装一个静态工厂之类的,但是这样写不太高级,那就将他讲给spring管控,也就是第三方bean。默认单例化对象。

将配置信息写在application.yml,方便以后集中管控

application.yml

  1. spring:
  2. redis:
  3. password: 123456
  4. # 默认0库
  5. database: 0
  6. #连接超时时间
  7. timeout: 10000ms
  8. port: 6379
  9. host: 192.168.88.135
  10. jedis:
  11. pool:
  12. # 设置最大连接数
  13. max-active: 1024
  14. # 最大阻塞时间
  15. max-wait: 10000ms
  16. # 最大空间连接,默认8
  17. max-idle: 200
  18. # 最小空间连接,默认5
  19. min-idle: 4

Redis.config

遇到的问题:

注意白色是字符串,蓝色的是number,读取时一定不要弄错了

af43fde401c747e4968fdb28bd5c8b12.png

  1. @Configuration
  2. public class RedisConfig {
  3. @Value("${spring.redis.jedis.pool.max-idle}")
  4. private int maxIdle;
  5. @Value("${spring.redis.jedis.pool.max-wait}")
  6. private String maxWaitMillis;
  7. @Value("${spring.redis.jedis.pool.min-idle}")
  8. private int minIdle;
  9. @Value("${spring.redis.jedis.pool.max-active}")
  10. private int maxTotal;
  11. @Value("${spring.redis.port}")
  12. private int port;
  13. @Value("${spring.redis.host}")
  14. private String host;
  15. @Value("${spring.redis.timeout}")
  16. private String timeout;
  17. @Value("${spring.redis.password}")
  18. private String password;
  19. @Value("${spring.redis.database}")
  20. private int database;
  21. @Bean /** 返回jedis连接池*/
  22. public JedisPool getJedisPool(){
  23. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  24. // 设置最大连接数
  25. jedisPoolConfig.setMaxTotal(maxTotal);
  26. // 设置最大空间连接
  27. jedisPoolConfig.setMaxIdle(maxIdle);
  28. // 设置最小空间连接
  29. jedisPoolConfig.setMinIdle(minIdle);
  30. // 设置最大阻塞时间(注意是个10000ms字符串)
  31. jedisPoolConfig.setMaxWaitMillis(Long.parseLong(maxWaitMillis.substring(0,maxWaitMillis.length()-2)));
  32. // 创建数据库对象
  33. JedisPool jedisPool = new JedisPool(jedisPoolConfig,host, port,
  34. (int) Long.parseLong(timeout.substring(0,timeout.length()-2)),password,database);
  35. return jedisPool;
  36. }
  37. }

1.4 jedis操作各种数据类型

  1. Jedis jedis = jedisPool.getResource();
  2. // 操作数据类型 -- java代码
  3. jedis.set("name","qhx");
  4. // -- redis指令
  5. set name qhx

其实,看上述操作jedis和原指令无吊区别。会redis操作指令就会这个。

hash封装map更简单

21d440440b5e4335ac72e4d33fd0c6ae.png

redis操作指令入门级别:https://blog.csdn.net/Qhx20040819/article/details/131219793

f9a7f00795674173b7035b6ae21fb641.png

事务处理

b09a82b703a94e0586246c670838a501.png

操控byte数组

先说一下,一个java对象要正常实现序列化:

  1. 对象必须实现Serializable 接口,这是Java提供的标准的序列化接口。
  2. 使用 Java 序列化机制提供的 ObjectOutputStream 类将对象写入到输出流中。通过 ObjectOutputStreamwriteObject() 方法可以将一个对象序列化后,写入到输出流(如文件流、网络流等)中。

发表评论

表情:
评论列表 (有 0 条评论,169人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis(五)之整合Jedis与Spring

    思路:创建一个redis操作的接口。分别创建两个实现类对应redis 的单机版和集群版。当使用单机版redis时,配置单机版的实现类,当使用集群版本的时候,配置集群版的实现类。