SpringBoot + Redis 簡単に作るデモ


はじめに

springbootとは、java開発者にとって一番使いやすいフレームワークだと思います。
redisとは、人気のNOSQLのDBの一つです。
今回はspringbootとredisを使ってCURDのデモを作ります。

事前準備

1.環境:
     SpringBoot
     Redis
     Gradle
 
 2.プロジェクト構築
  Spring Initializrを頼んで自動的にプロジェクト雛形を生成されます。

  以下のように設定してください。
   ① Gradle Project
   ② Java
   ③ Spring Boot 2.1.5

  

やったこと

1.まずはプロジェクト用のライブラリを導入するため、以下の設定を行う。
 ① build.gradleファイルを開いて以下のようにkey-valueの形で設定します。

   dependencies {
      implementation('org.springframework.boot:spring-boot-starter-data-redis')
      implementation('org.springframework.boot:spring-boot-starter-web')
      testImplementation('org.springframework.boot:spring-boot-starter-test')
   }

2.redis サービスの配置
  application.propertiesを開く、以下の内容を追加する。(パスワードなくてもいいです。)

   server.port=8088
   spring.redis.database=0
   spring.redis.host=localhost
   spring.redis.port=6379
   spring.redis.password=
   spring.redis.timeout=200

 3.実装したソースです。
   
   まずはRedisConfig.javaを作って、

@Configuration
public class RedisConfig {

@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
    RedisTemplate<String,Object> template = new RedisTemplate <>();
    template.setConnectionFactory(factory);

    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);

    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    // key采用String的序列化方式
    template.setKeySerializer(stringRedisSerializer);
    // hash的key也采用String的序列化方式
    template.setHashKeySerializer(stringRedisSerializer);
    // value序列化方式采用jackson
    template.setValueSerializer(jackson2JsonRedisSerializer);
    // hash的value序列化方式采用jackson
    template.setHashValueSerializer(jackson2JsonRedisSerializer);
    template.afterPropertiesSet();
    return template;
  }
}

 後はRedisService.javaを作って、いろんな機能を実装します。

    @Service
    public class RedisService {

      /**
       * 注入redisTemplate bean
       */
      @Autowired
      private RedisTemplate<String,Object> redisTemplate;

      /**
       * 删除缓存
       *
       * @param key 可以传一个值 或多个
       */
      @SuppressWarnings("unchecked")
      public void del(String... key) {
        if (key != null && key.length > 0) {
          if (key.length == 1) {
            redisTemplate.delete(key[0]);
          } else {
            redisTemplate.delete(CollectionUtils.arrayToList(key));
          }
        }
      }

      /**
       * 普通缓存获取
       *
           * @param key 键
       * @return 值
           */
      public Object get(String key) {
        return key == null ? null : redisTemplate.opsForValue().get(key);
      }

      /**
       * 普通缓存放入
       *
       * @param key   键
       * @param value 值
       * @return true成功 false失败
       */
      public boolean set(String key, Object value) {
        try {
          redisTemplate.opsForValue().set(key, value);
          return true;
        } catch (Exception e) {
          e.printStackTrace();
          return false;
        }
      }
}

 最後に機能をテストため、コントローラを作ってみました。

@RestController
@RequestMapping(value = "/redis")
public class RedisController {
    /**
     * 注入redisTemplate bean
     */
      @Autowired
      private RedisService redisService;

      /**
       * 保存(更新)数据
       * @param key
       * @param value
       * @return
       */
      @RequestMapping(value="/add",method=RequestMethod.GET)
      public String add(String key,String value) {
          redisService.set(key, value);

          return "add successfully";
      }

      /**
       * 删除指定数据
       * @param key
       * @return
       */
      @GetMapping(value="/delete")
      public String delete(String key) {

          redisService.del(key);
          return "delete successfully";
      }

      /**
       * 读取指定数据
       * @param key
       * @return
       */
      @GetMapping(value="/get")
      public String get(String key) {
          return redisService.get(key)==null ? "data don't exist!" :     redisService.get(key).toString();
      }
}

テスト

 まずはRedisサーバーをredis-server redis.windows.confで起動します。以下のようなです。
 

その後、プロジェクトをスタートする。
 
 ① 保存機能をテスト
  テストテータ:{city:tokyo}
URL : localhost:8088/redis/add?key=city&value=tokyo
ブラウザでテストURLを入力し、アクセスすると正常に保存することが見えます。
  

② 取得機能をテスト
  URL : localhost:8088/redis/get?key=city
ほら、先に保存したデータを取得します。

 ③ 削除機能をテスト
  URL : localhost:8088/redis/delete?key=city

保存されたデータを削除します。

テストはここまでです。

最後に

この記事に興味があれば、ぜひ、ここにソースをダウンロードします。

本来の記事サイト:http://160.16.146.245/u/hyman/blogs/11

以上