秒杀项目(2)集成redis
生活随笔
收集整理的這篇文章主要介紹了
秒杀项目(2)集成redis
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、集成redis
- 1. 1set方法存在的問題
- 1.2 key封裝
- 1.3 前綴接口
- 1.4 BasePrefix
- 1.5 UserKey
- 1.6 帶前綴的get和set方法
- 二、RedisService其他功能完善
- 2.1 判斷key是否存在
- 2.2 減少值
- 2.3 增加值
- 2.4 減少和增加是兩個原子操作
- 三、redis設置密碼
- 3.1 臨時設置redis密碼
- 3.2 永久設置redis密碼
一、集成redis
1. 1set方法存在的問題
如果是相同的key值的話,后面存的值會覆蓋前面的值,可能會造成數據的流失,帶來一系列問題,所以,在存儲數據時,最好加上數據的前綴Prefix,前綴和key構成真正的key值來進行存儲。
1.2 key封裝
- 模板模式
接口-----》抽象類-----》實現類
接口:搭好功能的框架
抽象類:一些公共方法的實現
實現類:具體方法的實現
1.3 前綴接口
public interface KeyPrefix {//有效期public int expireSeconds();//前綴public String getPrefix(); }1.4 BasePrefix
public abstract class BasePrefix implements KeyPrefix {public BasePrefix() {}public BasePrefix(String prefix){this(0,prefix);}private int expireSeconds;private String prefix;public BasePrefix(int expireSeconds,String prefix){this.expireSeconds = expireSeconds;this.prefix = prefix;}@Override//默認0代表永不過期public int expireSeconds() {return 0;}@Overridepublic String getPrefix() {String simpleName = this.getClass().getSimpleName();return simpleName + ":" + prefix;} }1.5 UserKey
public class UserKey extends BasePrefix {public UserKey() {}//永不過期public UserKey(String prefix){super(0,prefix);}public UserKey(int expireSeconds, String prefix) {super(expireSeconds, prefix);}//ID作為前綴public static UserKey getById = new UserKey("id");//name作為前綴public static UserKey getByName = new UserKey("name");@Overridepublic int expireSeconds() {return super.expireSeconds();}@Overridepublic String getPrefix() {return super.getPrefix();} }1.6 帶前綴的get和set方法
//獲取數據的方法public <T>T get(KeyPrefix keyPrefix,String key,Class<T> tClass){Jedis jedis = null;//連接池,用完記得釋放try {//取到真正的keyString realkey = keyPrefix.getPrefix() + key;jedis = jedisPool.getResource();//默認得到的是一個String類型的數據,但是我們需要的是一個T類型的數據String data = jedis.get(realkey);T finaData = stringToBean(data,tClass);return finaData;}finally {closePool(jedis);}} //設置數據的方法public <T>Boolean set(KeyPrefix keyPrefix,String key,T value){Jedis jedis = null;//連接池,用完記得釋放try {jedis = jedisPool.getResource();//必須先將T類型的數據轉換為String類型String finaData = beanToString(value);//如果為空則直接返回false//取到真正的keyString realkey = keyPrefix.getPrefix() + key;int expireSeconds = keyPrefix.expireSeconds();if(finaData == null || finaData.length() < 0){return false;}if(expireSeconds <= 0){//不需要設置過期時間,永不過期jedis.set(realkey, finaData);}else {//需要設置過期時間jedis.setex(key,expireSeconds,finaData);}return true;}finally {closePool(jedis);}}- get()方法:需要設置一個帶前綴的key,和帶過期時間的值
- set()方法:獲得一個帶前綴的值
二、RedisService其他功能完善
2.1 判斷key是否存在
//判斷key是否存在//設置數據的方法public <T>Boolean exist(KeyPrefix keyPrefix,String key,T value){Jedis jedis = null;//連接池,用完記得釋放try {jedis = jedisPool.getResource();//必須先將T類型的數據轉換為String類型String finaData = beanToString(value);//如果為空則直接返回false//取到真正的keyString realkey = keyPrefix.getPrefix() + key;return jedis.exists(realkey);}finally {closePool(jedis);}}2.2 減少值
public Long exist(KeyPrefix keyPrefix,String key,T value){Jedis jedis = null;//連接池,用完記得釋放try {jedis = jedisPool.getResource();//必須先將T類型的數據轉換為String類型String finaData = beanToString(value);//如果為空則直接返回false//取到真正的keyString realkey = keyPrefix.getPrefix() + key;return jedis.decr(realkey);}finally {closePool(jedis);}}2.3 增加值
//增加值public Long exist(KeyPrefix keyPrefix,String key,T value){Jedis jedis = null;//連接池,用完記得釋放try {jedis = jedisPool.getResource();//必須先將T類型的數據轉換為String類型String finaData = beanToString(value);//如果為空則直接返回false//取到真正的keyString realkey = keyPrefix.getPrefix() + key;return jedis.incr(realkey);}finally {closePool(jedis);}}2.4 減少和增加是兩個原子操作
三、redis設置密碼
3.1 臨時設置redis密碼
config set requirepass 123456 auth 123456 config get requirepass3.2 永久設置redis密碼
- 在配置文件中設置:
- 重新啟動redis配置文件
- 查看redis服務運行狀態
- 客戶端進入redis
總結
以上是生活随笔為你收集整理的秒杀项目(2)集成redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Linux系统下字体没有宋体和黑体问
- 下一篇: anaconda 修复快捷方式