日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

秒杀项目(2)集成redis

發布時間:2024/8/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 秒杀项目(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 requirepass

3.2 永久設置redis密碼

  • 在配置文件中設置:
cd /etc/redis vim redis.config
  • 重新啟動redis配置文件
service redis-server restart
  • 查看redis服務運行狀態
service redis-server status
  • 客戶端進入redis
redis-cli -h 127.0.0.1 -p 6379 -a 123456

總結

以上是生活随笔為你收集整理的秒杀项目(2)集成redis的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。