• Java操作Redis以及Redis线程池的用法


    Redis的Java客户端

    Redis的Java客户端类别

    Jedis

    Jedis直连

    引入依赖 

    建立连接、编写测试方法、释放资源

    Jedis线程池


    Redis的Java客户端

    在Redis官网中提供了很多语言的客户端:Redis官网

    Redis的Java客户端类别

    所以我们大致是要了解3种客户端 Jedis、lettuce、Redisson

    其中Spring帮我们做了整合,将Jedis与lettuce进行了封装成了它特有的Spring Data Redis

    至于Redisson是用在分布式的场景中,在学习分布式锁的时候小伙伴可以自行去了解一下,这里不做赘述。

    Jedis

    Jedis直连

    • 引入依赖

            

    • 建立连接

            

    • 编写测试方法

            

    • 释放资源

            

    引入依赖 

    1. <!--redis的依赖-->
    2. <dependency>
    3. <groupId>redis.clients</groupId>
    4. <artifactId>jedis</artifactId>
    5. <version>3.7.0</version>
    6. </dependency>
    7. <!--测试-->
    8. <dependency>
    9. <groupId>org.junit.jupiter</groupId>
    10. <artifactId>junit-jupiter</artifactId>
    11. <version>5.8.2</version>
    12. <scope>test</scope>
    13. </dependency>

    建立连接、编写测试方法、释放资源

    1. public class JedisTest {
    2. private Jedis jedis;
    3. // 在Junit5中使用了 @BeforeEach注解替代了 在Junit4的@Before
    4. // 表示应在当前类中的每个@Test方法之前执行注解方法
    5. @BeforeEach
    6. void setUp() {
    7. // 建立连接
    8. jedis = new Jedis("192.168.88.130",6379);
    9. // 设置密码
    10. jedis.auth("888888");
    11. // 选择库
    12. jedis.select(0);
    13. }
    14. @Test
    15. void testString() {
    16. // 插入数据
    17. String set = jedis.set("name", "天狼");
    18. System.out.println(set);
    19. // 获取数据
    20. String name = jedis.get("name");
    21. System.out.println(name);
    22. }
    23. @AfterEach
    24. void setDown() {
    25. if (jedis != null) {
    26. jedis.close();
    27. }
    28. }
    29. }

    注意:

            在Junit5中使用 @BeforeEach注解替代了 在Junit4的@Before。表示应在当前类中的每个@Test方法之前执行注解方法。

    后面的@AfterEach也类似,表示在@Test方法之后执行注解方法。

    Jedis线程池

    Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐使用Jedis连接池的方式代替直连。

    我们通常会创建一个工具类JedisConnectFactory ,用于创建其连接池,设置参数。

    JedisConnectFactory 用于设置连接池的属性 

    1. public class JedisConnectFactory {
    2. private static final JedisPool jedisPoll;
    3. static {
    4. // 配置连接池
    5. JedisPoolConfig poolConfig = new JedisPoolConfig();
    6. // 最大连接数
    7. poolConfig.setMaxTotal(8);
    8. // 最大空闲连接(没有人访问,池子中仍存在的连接数)
    9. poolConfig.setMaxIdle(8);
    10. // 最小空闲时间(超过一段时间,要是一直没有访问...)
    11. poolConfig.setMinIdle(0);
    12. // 等待时长
    13. poolConfig.setMaxWaitMillis(1000);
    14. //创建连接池对象
    15. jedisPoll = new JedisPool(poolConfig,
    16. "192.168.88.130",
    17. 6379,
    18. 1000,
    19. "888888");
    20. }
    21. public static Jedis getJedis() {
    22. return jedisPoll.getResource();
    23. }
    24. }

    和上述的Test方法相比 只是将new Jedis("192.168.88.130",6379) 转变为调用刚刚创建的工具类中的静态方法JedisConnectFactory.getJedis();

    1. public class JedisTest {
    2. private Jedis jedis;
    3. // 在Junit5中使用了 @BeforeEach注解替代了 在Junit4的@Before
    4. // 表示应在当前类中的每个@Test方法之前执行注解方法
    5. @BeforeEach
    6. void setUp() {
    7. // 建立连接(连接池!!!)
    8. jedis = JedisConnectFactory.getJedis();
    9. // 设置密码
    10. jedis.auth("888888");
    11. // 选择库
    12. jedis.select(0);
    13. }
    14. @Test
    15. void testString() {
    16. // 插入数据
    17. String set = jedis.set("name", "天狼");
    18. System.out.println(set);
    19. // 获取数据
    20. String name = jedis.get("name");
    21. System.out.println(name);
    22. }
    23. @AfterEach
    24. void setDown() {
    25. if (jedis != null) {
    26. jedis.close();
    27. }
    28. }
    29. }
  • 相关阅读:
    公众号迁移小程序也会迁移吗?
    【Qt QML】VideoOutput被Window覆盖,部署到远程Linux主机与在远程主机直接运行效果不一致
    Linux性能优化实战CPU篇(二)
    C语言函数指针类型声明
    网站被大量cc攻击导致打不开怎么解决
    初次使用Ubuntu18.04遇到的问题——笔记4 (Ubuntu18.04+Anaconda+Pycharm+Pytorch)
    记一次 .NET 某消防物联网 后台服务 内存泄漏分析
    基于 Gin 的 HTTP 代理 demo
    微信小程序组件传值
    idea一键打包docker镜像并推送远程harbor仓库的方法(包含spotify和fabric8两种方法)--全网唯一正确,秒杀99%水文
  • 原文地址:https://blog.csdn.net/weixin_43715214/article/details/125354094