栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于redis分布锁(信号量)和存hash运用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于redis分布锁(信号量)和存hash运用

1.redis的基本用法已经在第一篇文章详细介绍过,就不再过多介绍,在使用redis分布锁的时候还要导一个依赖:

    org.redisson
    redisson
    3.13.6
2.再导入一个配置类用于客户端初始化
@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 keys = redisTemplate.keys("activity:*");//通过前缀获取到所有的大key
ArrayList allcourses = new ArrayList<>();//定义一个list集合用来装数据
keys.forEach(key1->{//遍历以后直接用大key获取到所有value会返回一个List因为存的时候就是KillCourse所以去掉Object直接装入allcourses 中即可
    List killCourses = redisTemplate.opsForHash().values(key1);
    allcourses.addAll(killCourses);
}); 

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号