|  |  |  | 
|---|
|  |  |  | package com.zy.common.utils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.toolkit.StringUtils; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.data.redis.core.RedisTemplate; | 
|---|
|  |  |  | import org.springframework.data.redis.core.StringRedisTemplate; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  | import org.springframework.util.CollectionUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.HashMap; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  | import java.util.Set; | 
|---|
|  |  |  | 
|---|
|  |  |  | * redisTemplate封装 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | //@Component | 
|---|
|  |  |  | @Component | 
|---|
|  |  |  | public class RedisUtil { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisTemplate<String, Object> redisTemplate; | 
|---|
|  |  |  | //    @Autowired | 
|---|
|  |  |  | //    private RedisTemplate<String, Object> redisTemplate; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public RedisUtil(RedisTemplate<String, Object> redisTemplate) { | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisTemplate redisTemplate; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private StringRedisTemplate stringRedisTemplate; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static final String LOCK_PREFIX = "lock:"; | 
|---|
|  |  |  | private static final long DEFAULT_EXPIRE_TIME = 10; // 默认锁过期时间,单位为分钟 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public RedisUtil(RedisTemplate redisTemplate) { | 
|---|
|  |  |  | this.redisTemplate = redisTemplate; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Redis加锁的操作 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public Boolean tryLock(String key) { | 
|---|
|  |  |  | String redisKey = LOCK_PREFIX + key; | 
|---|
|  |  |  | return redisTemplate.opsForValue().setIfAbsent(redisKey, "locked", DEFAULT_EXPIRE_TIME, TimeUnit.MINUTES); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Redis解锁的操作 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void unlock(String lockKey) { | 
|---|
|  |  |  | String redisKey = LOCK_PREFIX + lockKey; | 
|---|
|  |  |  | redisTemplate.delete(redisKey); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取全部数据 | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public HashMap<Object, Object> getRedis() { | 
|---|
|  |  |  | Set<String> keys = redisTemplate.keys("*"); | 
|---|
|  |  |  | HashMap<Object, Object> map = new HashMap<>(); | 
|---|
|  |  |  | for (String key : keys) { | 
|---|
|  |  |  | Object value = redisTemplate.opsForValue().get(key); | 
|---|
|  |  |  | map.put(key, value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return map;//返回全部数据集合 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 普通缓存放入 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param key   键 | 
|---|
|  |  |  | 
|---|
|  |  |  | public boolean set(String key, Object value) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | redisTemplate.opsForValue().set(key, value); | 
|---|
|  |  |  | long start = System.currentTimeMillis(); | 
|---|
|  |  |  | while (System.currentTimeMillis() - start < 10000) {//有效期10s | 
|---|
|  |  |  | Object o = redisTemplate.opsForValue().get(key); | 
|---|
|  |  |  | if (o == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (o.equals(value)) { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|