Jedis以及SpringBoot整合Redis

说明:本文章是看b站狂神的Redis视频做的笔记,想了解详细内容可以移步→https://www.bilibili.com/video/BV1S54y1R7SB?p=1

Jedis

使用Java操作Redis

Jedis是Redis官方推荐的java连接开发工具,使用java操作Redis中间件。

基本使用

1、导入对应的依赖

<dependencies>
    <!--导入jedis的依赖-->
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.3.0</version>
    </dependency>

    <!--fastjson-->
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.73</version>
    </dependency>
</dependencies>

2、编码测试

  • 连接数据库

    public class TestPing {
         
        public static void main(String[] args) {
         
            //1、new Jedis对象即可
            Jedis jedis = new Jedis("127.0.0.1",6379);
            //2、jedis所有的命令就是Redis中的命令,在Redis是命令,在jedis中是方法
            System.out.println(jedis.ping());  //测试连接,输出为pong表示连接成功
        }
    }
    

    输出:

Jedis测试输出

  • 操作命令

    Jedis的操作命令同Redis中的命令一样

    jedis.flushDB();  //清空数据
    System.out.println("判断username是否存在:"+jedis.exists("username"));
    jedis.set("username","maize");
    jedis.set("password","123465");
    System.out.println("系统中所有的键如下:");
    Set<String> keys = jedis.keys("*");
    System.out.println(keys);
    ...
    
  • 断开连接

    jedis.close();
    

事务

在Jedis中操作事务,其步骤和在Redis中直接操作事务一样,

Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.flushDB();

JSONObject jsonObject = new JSONObject();
jsonObject.put("username","maize");
jsonObject.put("password","123456");
String s = jsonObject.toJSONString();

//开启事务
Transaction multi = jedis.multi();
//jedis.watch("user1");//乐观锁
try {
   
    multi.set("user1",s);
    multi.set("user2",s);
    //int i = 1/0;  //模拟运行时错误
    //执行事务
    multi.exec();
} catch (Exception e) {
   
    multi.discard();  //放弃事务
    e.printStackTrace();
}finally {
   
    System.out.println(jedis.get("user1"));
    System.out.println(jedis.get("user2"));
    //关闭连接
    jedis.close();
}

当正常运行时,结果如下:

TX正常

将模拟运行时错误的注释打开,在事务未执行时,会抛出异常, 并在catch块中放弃事务,因此事务队列中的事务均未执行成功。

TX运行错误

SpringBoot整合Redis

说明:在Spring Boot2.x之后,原来使用的jedis被替换成为lettuce

jedis:底层采用的是直连,多个线程操作的话,是不安全的,如果要避免不安全的额情况,可以使用jedis pool(更像BIO模式)

lettuce:底层采用的是netty,实例可以在多个线程中共享,不存在线程不安全的情况,可以减少线程数量,更像NIO模式

源码分析:

@Bean
@ConditionalOnMissingBean(name = "redisTemplate")  
//我们可以自己定义一个RedisTemplate来替换默认的RedisTemplate,@ConditionalOnMissingBean注解的意思是redisTemplate对象不存在时就加入容器,存在时不加入
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
      throws UnknownHostException {
   
    //默认的RedisTemplate没有过多的设置,redis对象都是需要序列化的
    //两个泛型都是Object类型,在使用时需要强制类型转换,比如我们常用的<String, Object>
   RedisTemplate<Object, Object> template = new RedisTemplate<>();
   template.setConnectionFactory(redisConnectionFactory);
   return template;
}

@Bean 
@ConditionalOnMissingBean  //由于String类型是常用的,因此单独封装了一个Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
      throws UnknownHostException {
   
   StringRedisTemplate template = new StringRedisTemplate();
   template.setConnectionFactory(redisConnectionFactory);
   return template;
}

整合测试

1、导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、配置连接

#配置redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

3、测试

 @Autowired
    RedisTemplate redisTemplate;
    @Test
    void testRedisTemplate() {
   

        //redisTemplate的方法,opsForValue表示操
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值