Springboot简单使用redis

SpringBoot使用redis

Linux安装redis

  1. 下载
    windows环境下载地址: http://www.redis.cn/
    可直接在linux上下载:执行wget http://download.redis.io/releases/redis-5.0.5.tar.gz
  2. 安装
    解压完文件
tar -zxvf redis-5.0.5.tar.gz

来到

yum install gcc ##安装c编译库,如果有就不需要安装了
yum install gcc-c++ ##安装c++编译库
make
make install 
cd redis-5.0.5

安装后执行文件在src目录下,配置文件redis.conf就在安装文件下,为了方便管理,可以将它们放在新的文件目录中。

  1. 修改redis.conf配置文件
vi redis.conf
#bind127.0.0.1 ##注释这个配置,可通过/bind命令按n查找
protected-mode no ##原来默认是yes,可通过/protected-mode命令按n查找

这两个配置的作用是让redis可以远程访问

  1. 启动Redis
./redis.server ../redis.conf ##来到src目录下执行
  1. 测试
    可以使用内置的客户端与Redis进行交互:
$ ./redis.cli 
redis> set redis helloRedis
OK
redis> get redis 
"helloRedis"
  1. 测试远程访问6379端口
    默认没关闭防火墙,远程无法访问,需要开放端口或者直接关闭防火墙,这里我选择开放端口
firewall-cmd --add-port = 6379/tcp --permanent ##永久添加6379端口
firewall-cmd --reload ##重新载入配置
iptables -L -n ##查看规则

从远程调用端测试6379端口是否可以访问telnet <ip> 6379

Springboot配置使用Redis

  1. 依赖
        <!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!--spring2.X集成redis所需common-pool2-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.0</version>
        </dependency>
  1. application.yml配置
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos配置
  profiles:
    active: dev
  application:
    name: redis-test
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/redistest?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
  redis: #redis配置
    host: 123.22.22.22 #服务器ip
    port: 6379 #redis端口
    database: 0
    timeout: 1800000 #超时时间
    lettuce:
      pool:
        max-active: 20
        max-wait: -1
        max-idle: 5
        min-idle: 0

  1. Springboot启动类
@SpringBootApplication
@EnableDiscoveryClient //nacos注册发现
@ComponentScan(basePackages = {"com.redistext"})
public class RedisApplication {
    public static void main(String[] args) {
        SpringApplication.run(RedisApplication .class,args);
    }
}

没有什么需要开启的

  1. 配置类
@Configuration
@EnableCaching //开启缓存
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;
    }
}
  1. 使用方法
  • @Cacheable用法
	@Cacheable(key = "'selectAllBanner'",value = "banner")
    public List<CrmBanner> selectAllBanner() {
        QueryWrapper<CrmBanner> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("id");
        //last可以拼接spl语句
        wrapper.last("limit 2");
        List<CrmBanner> list = baseMapper.selectList(wrapper);
        return list;
    }

重点是@Cacheable注解,会在redis中生成key为:banner::selectAllBanner,value为:list内容的键值对。

  • @CacheEvict
@CacheEvict(value = "banner",allEntries = true)
public List<CrmBanner> selectAllBanner() {
        QueryWrapper<CrmBanner> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("id");
        //last可以拼接spl语句
        wrapper.last("limit 2");
        List<CrmBanner> list = baseMapper.selectList(wrapper);
        return list;
    }

在使用@CacheEvict注解设置allEntries = true会清空banner缓存。

  • RedisTemplate使用
 	@Autowired
	private RedisTemplate<String,String> redisTemplate;
	
	public void testRedis(String phoneNumber,String code){
		//存入数据,设置有效时间5分钟
		redisTemplate.opsForValue().set(phoneNumber,code,5, TimeUnit.MINUTES);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值