springboot中redis的简单使用

springboot中简单使用redis

技术概述

需要操作庞大的临时数据,且并发量高时可以用redis缓存技术,该技术访问数据时速度远大于直接访问数据库,提高非持久化的数据访问与操作的效率,本文简单介绍java对redis的简单操作。

环境与工具

redis-x64-3.2.* ,RedisDesktopManager(图形化管理工具),已配置好的springboot工程

技术详述

第一步:redis的安装与配置

1、官网下载redis后安装,在解压的文件夹中找到redis中的redis.conf文件开始编辑

2、找到bind 127.0.0.1并注释掉,修改protected-mode 为no,用于开启ip访问。 修改daemonize属性 将no 改为yes,用于开启后台运行。

2、启动redis,并用RedisDesktopManager连接,查看连接情况

 

第二步:依赖与redis配置

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

  ## Redis 配置
redis:
  ## Redis数据库索引(默认为0)
  database: 0
  name: MyRedis
  ## Redis服务器地址
  host: 127.0.0.1
  ## Redis服务器连接端口
  port: 6379
  ## Redis服务器连接密码(默认为空)
  password:
  jedis:
    pool:
      ## 连接池最大连接数(使用负值表示没有限制)
      #spring.redis.pool.max-active=8
      max-active: 8
        ## 连接池最大阻塞等待时间(使用负值表示没有限制)
      #spring.redis.pool.max-wait=-1
      max-wait: -1
        ## 连接池中的最大空闲连接
      #spring.redis.pool.max-idle=8
      max-idle: 8
        ## 连接池中的最小空闲连接
      #spring.redis.pool.min-idle=0
      min-idle: 0
    ## 连接超时时间(毫秒)
  timeout: 1200

 

 

第三步:新建RedisConfig配置类


@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
    RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofHours(1)); // 设置缓存有效期一小时
    return RedisCacheManager
            .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
            .cacheDefaults(redisCacheConfiguration).build();
}

@Bean
public RedisTemplate&lt;String, Object&gt; redisTemplate(RedisConnectionFactory factory) {

    RedisTemplate&lt;String, Object&gt; template = new RedisTemplate&lt;&gt;();
    // 配置连接工厂
    template.setConnectionFactory(factory);

    //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
    Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);

    ObjectMapper om = new ObjectMapper();
    // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jacksonSeial.setObjectMapper(om);

    // 值采用json序列化
    template.setValueSerializer(jacksonSeial);
    //使用StringRedisSerializer来序列化和反序列化redis的key值
    template.setKeySerializer(new StringRedisSerializer());

    // 设置hash key 和value序列化模式
    template.setHashKeySerializer(new StringRedisSerializer());
    template.setHashValueSerializer(jacksonSeial);
    template.afterPropertiesSet();

    return template;
}

@Bean
public HashOperations&lt;String, String, Object&gt; hashOperations(RedisTemplate&lt;String, Object&gt; redisTemplate) {
    return redisTemplate.opsForHash();
}

@Bean
public ValueOperations&lt;String, Object&gt; valueOperations(RedisTemplate&lt;String, Object&gt; redisTemplate) {
    return redisTemplate.opsForValue();
}

@Bean
public ListOperations&lt;String, Object&gt; listOperations(RedisTemplate&lt;String, Object&gt; redisTemplate) {
    return redisTemplate.opsForList();
}


@Bean
public SetOperations&lt;String, Object&gt; setOperations(RedisTemplate&lt;String, Object&gt; redisTemplate) {
    return redisTemplate.opsForSet();
}

@Bean
public ZSetOperations&lt;String, Object&gt; zSetOperations(RedisTemplate&lt;String, Object&gt; redisTemplate) {
    return redisTemplate.opsForZSet();
}

}

 第四步:在service层中注入bean(以下为项目代码例子)


@Service
public class UserService implements UserMapper {

@Autowired
private RedisTemplate redisTemplate;

public void deleteWanderUserByAccountNum(String accountNum){  //根据key删除记录
    if (redisTemplate.hasKey(RedisConfig.WANDER_USER_LIST + accountNum)) redisTemplate.delete(RedisConfig.WANDER_USER_LIST + accountNum);
}

public void insertWaitStartPlayer(Player player){
    ValueOperations&lt;String, JSONObject&gt; operations = redisTemplate.opsForValue();
    JSONObject playerJsonObject = new JSONObject();
    playerJsonObject.put("accountNum",player.getAccountNum());
    playerJsonObject.put("inRoomNum",player.getInRoomNum());
    if (redisTemplate.hasKey(RedisConfig.WAIT_START_USER_LIST + player.getAccountNum())) redisTemplate.delete(RedisConfig.WAIT_START_USER_LIST + player.getAccountNum());
    operations.set(RedisConfig.WAIT_START_USER_LIST + player.getAccountNum(),playerJsonObject,RedisConfig.PLAY_WAITING_TIME,TimeUnit.MINUTES);
}

public void insertWonderUser(User user){  //插入一条记录
    ValueOperations&lt;String, User&gt; operations = redisTemplate.opsForValue();
    if (redisTemplate.hasKey(RedisConfig.WANDER_USER_LIST + user.getAccountNum())) redisTemplate.delete(RedisConfig.WANDER_USER_LIST + user.getAccountNum());
    operations.set(RedisConfig.WANDER_USER_LIST + user.getAccountNum(),user,6,TimeUnit.HOURS);
}


public JSONObject getWaitStartPlayerByAccountNum(String accountNum){  //根据value获取Key
    ValueOperations&lt;String, JSONObject&gt; operations = redisTemplate.opsForValue();
    JSONObject res = operations.get(RedisConfig.WAIT_START_USER_LIST + accountNum);
    return res;
}

}

 

 

 

 第五步:在controller层注入使用

总结:

redis的安装与配置 --> 导入依赖与配置redis --> 新建RedisConfig配置类 --> 在service层中注入bean ->在controller层注入使用

 

参考文献:

Redis使用总结

Redis官网

posted on 2021-06-26 14:11  ChenMy。  阅读(732)  评论(0编辑  收藏  举报