Redis学习笔记之配置文件、发布和订阅、整合于SpringBoot、新数据类型(总体第二篇)

上一篇中已经学习到我们的redis的安装,和基本的数据类型,接下来学习文件配置等一系列内容。学习视频资源地址

1、Redis6配置文件

(1)数据单位

  • 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit,大小些不敏感。

(2)配置远程访问

  • 注掉bind
    在这里插入图片描述
  • 第二步是这里的:protected-mode 改为no
    在这里插入图片描述

(3)tcp-backlog

在这里插入图片描述
在这里插入图片描述

(4)timeout

  • 默认为0【你远程连接你的redis,很多时间没有操作,需要你重新连接才可以,如果设置为0就用不超时,如果设置为其他的,就多少时间后超时】
    在这里插入图片描述

(4)tcp-keepalive

  • 怎么说呢:我感觉就相当于每个300秒检测你的连接是否还活着【跟你心跳一样的】
    在这里插入图片描述

(5)配置redis后台启动

  • 之前讲过
    在这里插入图片描述

(6)pidfile

  • 你的进程号都是保存在run下面的一个文件里面
    在这里插入图片描述

(7)日志级别

  • 就是我们在开发的时候是debug呀什么的,可以更详细。
    在这里插入图片描述

(8)database默认的数据库【为0号库】

在这里插入图片描述

(9)redis密码

  • 打开注释的方式
    在这里插入图片描述
  • 通过命令的方式
    • config get requirepass
    • config set requirepass “密码”
    • auth 你的密码
      在这里插入图片描述

(10)limits

  • 可以设置同时可以与多少个客户端进行连接,默认为10000个
  • 如果达到上线,redis则会拒绝新的连接请求,并且向这些连接请求发出max number of clients reached
    在这里插入图片描述
    还有其他的就暂时不管了。以后用到了再记录。

2、redis发布和订阅

(1)概念

在这里插入图片描述

  • 关系
    在这里插入图片描述
  • 多个频道
    在这里插入图片描述
    在这里插入图片描述

(2)发布和订阅的代码实现流程

在这里插入图片描述
在这里插入图片描述

  • 订阅端的编写:SUBSCRIBE channell
    在这里插入图片描述
  • 发布端发布:publish channel message
    在这里插入图片描述
  • 结果
    在这里插入图片描述

3、redis6的新数据类型

(1)新数据类型之Bitmaps

在这里插入图片描述
在这里插入图片描述

(2)Bitmaps常用命令

  • 设置Bitmaps中某个偏移量(0或1):setbit key offset value
    • 例子说明
      在这里插入图片描述
      效果展示
      在这里插入图片描述
  • 取出值:getbit key offset
    在这里插入图片描述
    • 统计字符串被设置为1的bit数量,一般情况下,给定整个字符串都会被进行计数,通过指定额外的start和end参数,可以让计数只有特定的位上进行,start和end参数的设置,都可以使用负数值,比如-1表示最后一位,而-2表示倒数第二位,start和end是指bit组的字节下标数,二者揭包含。
      在这里插入图片描述
      在这里插入图片描述
  • 做一些符合操作:bitop
    在这里插入图片描述
    在这里插入图片描述
  • Bitmaps和set的比较
    在这里插入图片描述

(3)新数据类型之HyperLogLog

在这里插入图片描述
在这里插入图片描述

(4)HyperLogLog常用命令

  • pfadd:添加数据
    在这里插入图片描述
  • pfcount:统计数量
    在这里插入图片描述
  • pfmerge:对内容进行合并
    在这里插入图片描述

(5)新数据类型之Geospial

在这里插入图片描述
就是二维坐标。

(6)Geospial常用命令

  • geoadd key 经度 纬度 value
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 取出坐标值:geopos
    在这里插入图片描述

  • 获取两个位置之间的直线距离:geodist key 单位
    在这里插入图片描述

  • 以给定的经纬度为中心,找出某一半径内的元素:georadius key 经度 纬度 radius km/m/tf/mi

在这里插入图片描述

4、Jedis操作redis数据库

(1)测试连接

  • 创建maven项目
    在这里插入图片描述
  • 要看着两个参数在这里插入图片描述
  • 测试连接【前提是你刚才已经进行了修改,对bind和那个保护模式为no,然后重启服务】
    如果报如下错误【解决办法是:1、看配置文件里面的两是否修改,2、看你防火墙是否关闭,3、主要是你要把你的6379端口号放行】
    在这里插入图片描述
    在这里插入图片描述
  • 获取测试
    在这里插入图片描述

(2)模拟验证码的实现

在这里插入图片描述

  • 生成随机的六位验证码
    在这里插入图片描述

  • 输入验证码,点击验证,返回登录成功或失败

package cn.mldn;

import redis.clients.jedis.Jedis;

import java.util.Random;

public class RedisCode {

    public static void main(String[] args) {

        System.out.println(getCode());

    }


    /**
     * 1、生成验证码的方法
     * @return
     */
    public static String getCode() {
        Random random = new Random();
        String code = "";
        for (int i = 0; i < 6; i++) {
            int rand = random.nextInt(10);
            code += rand;
        }
        return code;
    }


    /**
     * 2、让每个手机只能发送三层,验证码放到redis里面,设置过期时间
     */
    public static void verifyCode(String phone,String code) {
        //连接redis
        Jedis jedis = new Jedis("124.222.42.57",6379);

        //拼接key
        String countKey = "VerifyCode" + phone + ":count";

        //验证码
        String codeKey = "VerifyCode" + phone + ":code";

        //每个手机每天只能发送三次
        String count = jedis.get(countKey);
        if (count == null) {
            //如果为null,则没有发送过
            jedis.setex(countKey,24*60*60,"1");
        } else if (Integer.parseInt(count) <=2 ) {
            //小于2的时候,就加一
            jedis.incr(codeKey);
        } else if (Integer.parseInt(count) > 2) {
            //说明已经发送了三次了
            System.out.println("你今天发送次数超过三次,不能再发送");
            return;//阻止,不让他在发送
        }

        //发送的验证码发送到redis里面
        String vcode = getCode();
        jedis.setex(codeKey,120,vcode);
        jedis.close();
    }

    /**
     * 3、验证码的效验
     */

    public static void getRedisCode(String phone,String code) {
        //连接redis
        Jedis jedis = new Jedis("124.222.42.57",6379);
        //验证码
        String codeKey = "VerifyCode" + phone + ":code";

        String redisCode = jedis.get(codeKey);
        if (redisCode.equals(code)) {
            System.out.println("验证成功");
            jedis.close();
        } else {
            System.out.println("验证失败");
            jedis.close();
        }
    }

}

5、SpringBoot整合redis

(1)创建项目

  • 废话不多说创建SpringBoot项目导入如下依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>1.2.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.9.0</version>
        </dependency>

(2)properties文件

#redis服务器地址
spring.redis.host=124.222.42.57
#redis服务器的连接端口号
spring.redis.port=6379
#redis的数据索引(默认为0
spring.redis.database=0
#redis的超时时间(毫秒
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

(3)编写配置类

@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;
    }
}


(4)整合


@RestController
public class TestController {

    @Autowired
    private RedisTemplate redisTemplate;
    @RequestMapping("/redisTest")
    public String testRedis() {
        //设置值到redis里面
        redisTemplate.opsForValue().set("name","key");
        //从redis里面获取值
        return (String)redisTemplate.opsForValue().get("name");
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值