Redis中的Jedis,SpringBoot整合Redis

本文介绍了如何使用Java的Jedis库连接和操作Redis,包括开启Redis服务,测试连接,以及实现验证码的生成和验证。此外,还展示了如何在SpringBoot中整合Redis,添加相关依赖,配置文件,创建RedisTemplate,并通过Controller进行测试。
摘要由CSDN通过智能技术生成

Jedis的使用: 

    Jedis通过java操作redis:


            1:开区端口号6379放行
                    开启端口号:firewall-cmd --permanent  --add-port=6379/tcp
             2、重启防火墙:firewall-cmd --reload
            3、查看端口号是否打开:firewall-cmd  --query-port=6379/tcp

        

测试连接是否成功

 
public static void main(String[] args) {
//     创建Jedis对象   填入虚拟机主机地址,Redis端口号
        Jedis jedis = new Jedis("192.168.131.100",6379);

        //测试
        System.out.println(jedis.ping());
        jedis.close();

    }

    调用Jedis中的api对Redis进行操作,方法和linux操作相同

:实例测试:
    1,输入手机号,点击发送验证码,随机生成六位数的验证码,两分钟有效
    2.输入验证码,点击验证,返回成功或失败
    3.每个手机号只能输入三次

public class PhoneDemo {

    public static void main(String[] args) {
        String phone = "17673027336";
        //设置过期时间,+每天只能输入三次
        setCodeTimeOut(phone);

        //验证码校验
        getRedisCode(phone,"2134123");


    }

    //3.验证码校验
    public static void getRedisCode(String phone,String code){
        Jedis jedis = new Jedis("192.168.131.100",6379);
        //验证码的key
        String codeKey = "codeKey";
        //判断验证次数的key
        String PhoneNum = phone+"count";


        String count = jedis.get(PhoneNum);
        if (Integer.parseInt(count)<=3){
            //发送次数+1
            jedis.incr(PhoneNum);
            //验证码校验
            String redisCode = jedis.get(codeKey);
            if(redisCode.equals(code)){
                System.out.println("验证码成功");
            }else{
                System.out.println("验证码错误");
            }
        }else{
            System.out.println("输入次数超过上限");
            //关闭jedis
            jedis.close();
        }



        jedis.close();


    }
    //2.将生成的验证码存入redis中,设置过期时间,每个手机只能发送三次
    public static void setCodeTimeOut(String phone){
        Jedis jedis = new Jedis("192.168.131.100",6379);
        //验证码对应的key
        String codeKey = "codeKey";


        //每天只能输入三次,存放的key
        String PhoneNum = phone+"count";
        //获取发送次数,如果为空标识未发送过
        String count = jedis.get(PhoneNum);

        if(count==null){
            jedis.setex(PhoneNum,24*60*60,"1");
        }

        //设置验证码的过期时间
        jedis.set(codeKey,code());
        //设置过期时间
        jedis.expire(codeKey,120);
        //查看过期时间
        System.out.println(jedis.ttl(phone));
        //关闭jedis
        jedis.close();

    }

    //1.生成一个六位验证码
    public static String code(){
        Random random = new Random();
        String code="";
        for (int j = 0; j < 6; j++) {
            int rand = random.nextInt(10);
            code += rand;
        }
        return code;
    }
}

SpringBoot中整合Redis:

        步骤一:创建SpringBoot工程,添加依赖

        <!-- redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--   spring2.x集成redis所需的 commons-pool2(连接池)    -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

         二:在application中添加配置:

#Redis服务器地址
spring.redis.host=虚拟机的IP地址
#Redis服务器连接端口
spring.redis.port=6379
#Redis数据库索引(默认为0)
spring.redis.database= 0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0

        三:创建一个Redis的配置类(SpringBoot中集成了redisTemplate)

@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
//key序列化方式
        template.setKeySerializer(redisSerializer);
//value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}

        

        四:创建controller进行测试

@RestController
@RequestMapping("/RedisTest")
public class RedisSBText {

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("/test")
    public String redisTest(){
        //设置值到redis
        redisTemplate.opsForValue().set("name","dongge");
        //获取redis中的值
        String name = (String) redisTemplate.opsForValue().get("name");
        return name;
    }
}

测试结果:

        

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值