jetCache 基本使用

1.pom引用


<!--jetcache缓存 lettuce-->
<dependency>
    <groupId>com.alicp.jetcache</groupId>
    <artifactId>jetcache-starter-redis-lettuce</artifactId>
    <version>2.5.14</version>
</dependency>

这里引用的集成是lettuce的redis客户端

 




2.
@SpringBootApplication
@EnableMethodCache(basePackages="com.example.demo") //开启 Cache注解
@EnableCreateCacheAnnotation   //启用createCache注解
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

  


3.配置文件配置 yml格式
#jetcache 集成使用
jetcache:
  statIntervalMinutes: 15   // 每隔多久统计信息的时长配置
  areaInCacheName: false   //是否配置前缀
  local:
    default:
      type: caffeine      //本地缓存类型
      keyConvertor: fastjson   //key的序列化转化的协议
      limit: 10000              //本地缓存最大个数
      defaultExpireInMillis: 10000   //缓存的时间全局 默认值
  remote:
    default:
      type: redis.lettuce          //缓存数据库类型
      keyConvertor: fastjson
      uri: redis://127.0.0.28:7224/  //这里支持集群配置
          #redis://127.0.0.28:7224/

          #redis://127.0.0.28:7224/

defaultExpireInMillis: 20000 //全局缓存失效时间
      #keyPrefix: ec

 



经过以上俩步已经可以使用jetCache注解 下面是基本的实战
package com.example.demo;

import com.alicp.jetcache.Cache;
import com.alicp.jetcache.anno.CacheType;
import com.alicp.jetcache.anno.CreateCache;
import io.lettuce.core.RedisClient;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;


public class redisTest extends BaseTest {


    @Autowired //lettuce 客户端专用
    private RedisClient defaultClient;
/*
     @Autowired
    private Pool defaultPool;*/

    @CreateCache(name = "test", expire = 100, timeUnit = TimeUnit.SECONDS, cacheType = CacheType.BOTH)
    private Cache<String, String> cache;
     //可以根据自己的数据类型自定义value的数据类型
    @CreateCache(name = "test", expire = 100, timeUnit = TimeUnit.MINUTES, cacheType = CacheType.BOTH)
    private Cache<String, List<String>> listCache;

    @Test
    public void test() throws IOException, InterruptedException {
        cache.put("liuxw:1", "liuxw");
        System.out.println("liuxw:1  " + cache.get("liuxw:1"));

        cache.computeIfAbsent("liuxw:2", res -> {

            return "liuxw2";
        });

        System.out.println(cache.get("liuxw:1  " + "liuxw2"));

        cache.computeIfAbsent("liuxw:3", res -> {

            return "liuxw2";
        }, true, 100, TimeUnit.MINUTES);

        System.out.println("liuxw:3  " + cache.get("liuxw:1"));

        Set<String> set = new HashSet<>(Arrays.asList("liuxw:1", "liuxw2"));
        Map<String, String> map = cache.getAll(set);
        cache.removeAll(set);

        //推荐使用这个 分布式锁
       boolean hasRun = cache.tryLockAndRun("liuxw3", 100, TimeUnit.SECONDS, () -> {
            System.out.println("我获取到锁了");
        });



            new Thread(() -> {
                //推荐使用这个
                boolean hasRun1 = cache.tryLockAndRun("liuxw3", 100, TimeUnit.SECONDS, () -> {
                    System.out.println("我获取到锁了"+Thread.currentThread().getName()+System.currentTimeMillis());
                    try {
                        Thread.sleep(0);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                });
                if (hasRun1){

                }else{
                    System.out.println("我没获取到锁了"+Thread.currentThread().getName());
                }
            }, "a1"+new Random().toString()).start();
        Thread.sleep(10);

        new Thread(() -> {
            //推荐使用这个
            boolean hasRun1 = cache.tryLockAndRun("liuxw3", 100, TimeUnit.SECONDS, () -> {
                System.out.println("我获取到锁了"+Thread.currentThread().getName()+System.currentTimeMillis());
                try {
                    Thread.sleep(0);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
            if (hasRun1){

            }else{
                System.out.println("我没获取到锁了"+Thread.currentThread().getName());
            }
        }, "a2"+new Random().toString()).start();

        Thread.sleep(0);

        new Thread(() -> {
            //推荐使用这个 todo 分布式锁实现逻辑学习一下
            boolean hasRun1 = cache.tryLockAndRun("liuxw3", 100, TimeUnit.SECONDS, () -> {
                System.out.println("我获取到锁了"+Thread.currentThread().getName()+System.currentTimeMillis());
                try {
                    Thread.sleep(0);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
            if (hasRun1){

            }else{
                System.out.println("我没获取到锁了"+Thread.currentThread().getName());
            }
        }, "a3"+new Random().toString()).start();

      System.in.read();
    }

}

 




posted @ 2020-04-02 20:08  liuxw666  阅读(9936)  评论(1编辑  收藏  举报