系列文章目录
前言
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
目前在图灵课堂,黑马课堂,都看到过关于Reids实现锁的讲解,虽然最后还是转向了Redisson,但是对于普通的系统,利用其代码来实现锁,或者根据其代码来理解锁,还是非常有用的。
这里根据其代码进行整理,然后留下代码以备后期学习
定义锁接口
package com.example.springboot.tool;
/**
* Redis锁
*/
public interface ILock {
/**
* 尝试获取锁
* @return true代表获取锁成功; false代表获取锁失败
*/
boolean tryLock();
/**
* 释放锁
*/
void unlock();
}
定义锁实现的代码
package com.example.springboot.tool;
import cn.hutool.core.lang.UUID;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
/**
* Redis锁-基于setnx的实现
* 问题1:不可重入
* 问题2:不可重试
* 问题3:超时释放
* 问题4:主从一致
*/
public class SimpleRedisLock implements ILock {
// 业务名称,通过不同业务来指定不同的锁
private String name;