想作一個秒殺項目,問了幾個大佬要了項目視頻,結果,本身本地實踐的時候,發現不太同樣,因此寫下這篇,爲之後作準備。java
習慣用SpringBoot的小夥伴都知道,須要配置Maven,添加幾個dependency。web
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
# Redis數據庫索引(默認爲0) spring.redis.database=0 # Redis服務器地址 spring.redis.host=localhost # Redis服務器鏈接端口 spring.redis.port=6379 # Redis服務器鏈接密碼(默認爲空) spring.redis.password= # 鏈接池最大鏈接數(使用負值表示沒有限制) spring.redis.pool.max-active=200 # 鏈接池最大阻塞等待時間(使用負值表示沒有限制) spring.redis.pool.max-wait=-1 # 鏈接池中的最大空閒鏈接 spring.redis.pool.max-idle=10 # 鏈接池中的最小空閒鏈接 spring.redis.pool.min-idle=0 # 鏈接超時時間(毫秒) spring.redis.timeout=1000
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * @author: Tu9ohost */ @Configuration public class RedisConfig { @Bean @SuppressWarnings("all") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){ RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); template.setConnectionFactory(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); template.setKeySerializer(stringRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); template.setValueSerializer(jackson2JsonRedisSerializer); template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; /** * @author: Tu9ohost */ @Component public class RedisUtil { @Autowired private RedisTemplate<String,Object> redisTemplate; /** * 指定緩存失效時間 * @param key * @param time * @return */ public boolean expire(String key, long time){ try{ if (time > 0){ redisTemplate.expire(key,time, TimeUnit.SECONDS); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 根據key獲取過時時間 * @param key * @return */ public long getExpire(String key){ return redisTemplate.getExpire(key,TimeUnit.SECONDS); } /** * * @param key * @return */ public boolean hasKey(String key){ try { return redisTemplate.hasKey(key); }catch (Exception e){ e.printStackTrace(); return false; } } /** * 刪除緩存 * @param key */ @SuppressWarnings("unchecked") public void del(String... key){ if (key != null && key.length > 0){ if (key.length == 1){ redisTemplate.delete(key[0]); }else{ redisTemplate.delete(CollectionUtils.arrayToList(key)); } } } /** * 普通緩存獲取 * @param key * @return */ public Object get(String key){ return key == null ? null : redisTemplate.opsForValue().get(key); } /** * 普通緩存放入 * @param key * @param value * @return */ public boolean set(String key, Object value){ try { redisTemplate.opsForValue().set(key,value); return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 普通緩存放入並設置時間 * @param key * @param value * @param time * @return */ public boolean set(String key,Object value, long time){ try { if (time > 0){ redisTemplate.opsForValue().set(key,value,time,TimeUnit.SECONDS); }else{ set(key,value); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 遞增 * @param key * @param delta * @return */ public long incr(String key, long delta){ if (delta < 0){ throw new RuntimeException("遞增因子必須大於0"); } return redisTemplate.opsForValue().increment(key,delta); } public long decr(String key, long delta){ if (delta < 0){ throw new RuntimeException("遞減因子必須大於0"); } return redisTemplate.opsForValue().increment(key,-delta); } /** * HashGet * @param key * @param item * @return */ public Object hget(String key,String item){ return redisTemplate.opsForHash().get(key,item); } /** * 獲取hashKey對應的全部鍵值 * @param key * @return */ public Map<Object,Object> hmget(String key){ return redisTemplate.opsForHash().entries(key); } /** * HashSet * @param key * @param map * @return */ public boolean hmset(String key,Map<String,Object> map){ try { redisTemplate.opsForHash().putAll(key,map); return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * HashSet 並設置時間 * @param key * @param map * @param time * @return */ public boolean hmset(String key, Map<String,Object> map,long time){ try { redisTemplate.opsForHash().putAll(key,map); if (time > 0){ expire(key,time); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 向一張hash表中放入數據,若是不存在將建立 * @param key * @param item * @param value * @return */ public boolean hset(String key,String item, Object value){ try { redisTemplate.opsForHash().put(key,item,value); return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 向一張hash表中放入數據,若是不存在將建立 * @param key * @param item * @param value * @param time * @return */ public boolean hset(String key,String item,Object value,long time){ try { redisTemplate.opsForHash().put(key,item,value); if (time > 0){ expire(key,time); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 刪除hash表中的值 * @param key * @param item */ public void hdel(String key, Object... item){ redisTemplate.opsForHash().delete(key,item); } /** * 判斷hash表中是否有該項的值 * @param key * @param item * @return */ public boolean hHasKey(String key,String item){ return redisTemplate.opsForHash().hasKey(key,item); } /** * hsah遞增 若是不存在,就會建立一個 並把新增後的值返回 * @param key * @param item * @param by * @return */ public double hincr(String key,String item,double by){ return redisTemplate.opsForHash().increment(key,item,by); } /** * hash遞減 * @param key * @param item * @param by * @return */ public double hdecr(String key,String item,double by){ return redisTemplate.opsForHash().increment(key,item,-by); } /** * 根據key獲取Set中的全部值 * @param key * @return */ public Set<Object> sGet(String key){ try { return redisTemplate.opsForSet().members(key); }catch (Exception e){ e.printStackTrace(); return null; } } /** * 根據value從一個set中查詢,是否存在 * @param key * @param value * @return */ public boolean sHasKey(String key,Object value){ try { return redisTemplate.opsForSet().isMember(key,value); }catch (Exception e){ e.printStackTrace(); return false; } } /** * 將數據放入set緩存 * @param key * @param values * @return */ public long sSet(String key,Object... values){ try{ return redisTemplate.opsForSet().add(key,values); }catch (Exception e){ e.printStackTrace(); return 0; } } /** * 將set數據放入緩存 * @param key * @param time * @param values * @return */ public long sSetAndTime(String key,long time,Object... values){ try { Long count = redisTemplate.opsForSet().add(key,values); if (time > 0){ expire(key,time); } return count; }catch (Exception e){ e.printStackTrace(); return 0; } } /** * 獲取set緩存的長度 * @param key * @return */ public long sGetSetSize(String key){ try { return redisTemplate.opsForSet().size(key); }catch (Exception e){ e.printStackTrace(); return 0; } } /** * 移除值爲value的 * @param key * @param values * @return */ public long setRemove(String key,Object... values){ try { Long count = redisTemplate.opsForSet().remove(key,values); return count; }catch (Exception e){ e.printStackTrace(); return 0; } } /** * 獲取list緩存的內容 * @param key * @param start * @param end * @return */ public List<Object> lGet(String key,long start,long end){ try { return redisTemplate.opsForList().range(key,start,end); }catch (Exception e){ e.printStackTrace(); return null; } } /** * 獲取list緩存的長度 * @param key * @return */ public long lGetListSize(String key){ try { return redisTemplate.opsForList().size(key); }catch (Exception e){ e.printStackTrace(); return 0; } } /** * 經過索引,獲取list中的值 * @param key * @param index * @return */ public Object lGetIndex(String key,Long index){ try { return redisTemplate.opsForList().index(key,index); }catch (Exception e){ e.printStackTrace(); return null; } } /** * 將list放入緩存 * @param key * @param value * @return */ public boolean lSet(String key,Object value){ try { redisTemplate.opsForList().rightPush(key,value); return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 將list放入緩存 * @param key * @param value * @return */ public boolean lSet(String key,Object value,long time){ try { redisTemplate.opsForList().rightPush(key,value); if (time > 0){ expire(key,time); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 將list放入緩存 * @param key * @param value * @return */ public boolean lSet(String key,List<Object> value){ try { redisTemplate.opsForList().rightPushAll(key,value); return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 將list放入緩存 * @param key * @param value * @return */ public boolean lSet(String key,List<Object> value,long time){ try { redisTemplate.opsForList().rightPushAll(key,value); if (time > 0){ expire(key,time); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 根據索引修改list中的某條數據 * @param key * @param index * @param value * @return */ public boolean lUpdateIndex(String key,long index ,Object value){ try { redisTemplate.opsForList().set(key,index,value); return true; }catch (Exception e){ e.printStackTrace(); return false; } } public long lRemove(String key,long count,Object value){ try { Long remove = redisTemplate.opsForList().remove(key,count,value); return remove; }catch (Exception e){ e.printStackTrace(); return 0; } } }
因爲我本人是看視頻項目的,用到了web,因此這裏測試你們自行準備,能夠不用項目,直接一個測試類看看結果。
redis