1.redis的基本用法已经在第一篇文章详细介绍过,就不再过多介绍,在使用redis分布锁的时候还要导一个依赖:
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.13.6</version> </dependency>
2.再导入一个配置类用于客户端初始化
/** * redisson客户端初始化 */ @Configuration public class RedissonConfig { //创建客户端 @Bean public RedissonClient redissonClient(){ Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("123456"); return Redisson.create(config); }
3.用hash存入数据
redisTemplate.opsForHash().put("activity:"+activityId,killCoure.getId().toString(),killCoure);//activity是一个前缀,用来方便取数据; "activity:"+activityId这个是第一个key,为了方便称呼为大key killCoure.getId().toString()是因为第一篇万丈中redisconfig对hash的key做了序列化要用String类型,这是第二个key,称呼为小key; killCoure这是存入redis的value值,我存的是一个对象; 整个用法如下: redisTemplate.opsForHash().put(key1,key2,value)
4.用信号量存秒杀数量用法:
4.1注入:
@Autowired private RedissonClient redissonClient;
4.2使用:
String key = activityId+":"+killCoure.getId();//这是用来获取redis中value的key //获取每一个课程对应的信号量 RSemaphore semaphore = redissonClient.getSemaphore(key); //设置秒杀数量 boolean setPermits = semaphore.trySetPermits(10000);//10000代表对应value值的数量
5.从redis中获取value值
Set<Object> keys = redisTemplate.keys("activity:*");//通过前缀获取到所有的大key ArrayList<KillCourse> allcourses = new ArrayList<>();//定义一个list集合用来装数据 keys.forEach(key1->{//遍历以后直接用大key获取到所有value会返回一个List<Object>因为存的时候就是KillCourse所以去掉Object直接装入allcourses 中即可 List killCourses = redisTemplate.opsForHash().values(key1); allcourses.addAll(killCourses); });