Java 中 Redis 五大基本類型的用法

存儲格式

基本用法

Jedis工具[圖片上傳中...(image.png-8e2218-1556691362552-0)]

redis配置文件

String

Hash

List

Set

SortedSet

存儲格式

image.png

我自己是一個從事了6年的Java全棧工程師朦蕴,最近整理了一套適合2019年學(xué)習(xí)的Java\大數(shù)據(jù)資

料,從基礎(chǔ)的Java、大數(shù)據(jù)面向?qū)ο蟮竭M階的框架知識都有整理哦召娜,可以來我的主頁免費領(lǐng)取哦。

基本用法

通過Jedis(封裝了redis的Java客戶端)對redis進行操作拔稳。

Jedis工具類

public class JedisPoolUtil {

private static JedisPool pool = null;

static {

//加載配置文件

InputStream in = JedisPoolUtil.class.getClassLoader().getResourceAsStream("redis.properties");

Properties pro = new Properties();

try {

pro.load(in);

} catch (IOException e) {

e.printStackTrace();

System.out.println("加載文件失敗");

}

JedisPoolConfig poolConfig = new JedisPoolConfig();

//最大連接數(shù)

poolConfig.setMaxTotal(Integer.parseInt( pro.get("redis.maxTotal").toString()));

//最大空閑連接數(shù)

poolConfig.setMaxIdle(Integer.parseInt( pro.get("redis.maxIdle").toString()));

//最小空閑連接數(shù)

poolConfig.setMinIdle(Integer.parseInt( pro.get("redis.minIdle").toString()));

pool = new JedisPool(poolConfig, pro.get("redis.url").toString(),Integer.parseInt( pro.get("redis.port")

.toString()));

}

publicstaticJedisgetJedis(){returnpool.getResource();}publicstaticvoidrelease(Jedis jedis){if(null!= jedis){? ? ? ? jedis.close();? ? }}

}

redis配置文件

redis.maxTotal=100

redis.maxIdle=30

redis.minIdle=10

redis.url=192.168.202.200

redis.port=6379

String

public class StringTest {

public Jedis jedis = JedisPoolUtil.getJedis();

@Test

//添加和獲取

public void fun(){

jedis.set("num","1");

System.out.println(jedis.get("num"));

}

@Test

//刪除值

public void fun1(){

jedis.del("num");

System.out.println(jedis.get("num"));

}

@Test

//自減和自減

public void fun2(){

jedis.set("num","1");

System.out.println(jedis.get("num"));

jedis.decr("num");

System.out.println(jedis.get("num"));

jedis.incr("num");

jedis.incr("num");

System.out.println(jedis.get("num"));

}

@Test

//加上/減去 一個數(shù)

//incrBy 返回的是修改之后的值如果原值是字符串不是數(shù)字巩那,則會拋出異常

public void fun3(){

Long num = jedis.incrBy("num", 3);

System.out.println(num);

jedis.decrBy("num",10);

System.out.println(jedis.get("num"));? ? jedis.set("name","caopengfei");//jedis.decrBy("name",1);}@Test//字符串拼接publicvoid fun4(){Longlen = jedis.append("name","123");? ? System.out.println(len);? ? System.out.println(jedis.get("name"));}

}

Hash

public class HashTest {

public Jedis jedis = JedisPoolUtil.getJedis();

//? ? hash 操作的是map對象

// 適合存儲鍵值對象的信息

@Test

//存值 參數(shù)第一個變量的名稱, map鍵名(key)静浴, map鍵值(value)

// 調(diào)用hset

public void fun() {

Long num = jedis.hset("hash1", "username", "caopengfei");

System.out.println(num);

String hget = jedis.hget("hash1", "username");

System.out.println(hget);

}

@Test//也可以存多個key

// 調(diào)用hmset

public void fun1() {

Map<String, String> map = new HashMap<String, String>();

map.put("username", "caopengfei");

map.put("age", "25");

map.put("sex", "男");

String res = jedis.hmset("hash2", map);

System.out.println(res);//ok

}

@Test//獲取hash中所有的值publicvoidfun2() {Map map2 =newHashMap();? ? map2 = jedis.hgetAll("hash2");? ? System.out.println(map2);}@Test

// 刪除hash中的鍵 可以刪除一個也可以刪除多個,返回的是刪除的個數(shù)

public void fun3() {

Long num = jedis.hdel("hash2", "username", "age");

System.out.println(num);

Map<String, String> map2 = new HashMap<String, String>();

map2 = jedis.hgetAll("hash2");

System.out.println(map2);

}

@Test//增加hash中的鍵值對publicvoidfun4(){? ? Map map2 =newHashMap();? ? map2 = jedis.hgetAll("hash2");? ? System.out.println(map2);? ? jedis.hincrBy("hash2","age",10);? ? map2 = jedis.hgetAll("hash2");? ? System.out.println(map2);}@Test//判斷hash是否存在某個值publicvoidfun5(){? ? System.out.println(jedis.hexists("hash2","username"));? ? System.out.println(jedis.hexists("hash2","age"));}@Test//獲取hash中鍵值對的個數(shù)publicvoidfun6(){? ? System.out.println(jedis.hlen("hash2"));}//? ? 獲取一個hash中所有的key值@Testpublicvoidfun7(){? ? Set hash2 = jedis.hkeys("hash2");? ? System.out.println(hash2);}//? ? 獲取所有的value值@Testpublicvoidfun8(){? ? List hash2 = jedis.hvals("hash2");? ? System.out.println(hash2);}

}

List

public void testList()

{

jedis.flushDB();

System.out.println("===========添加一個list===========");

jedis.lpush("collections", "ArrayList", "Vector", "Stack", "HashMap", "WeakHashMap", "LinkedHashMap");

jedis.lpush("collections", "HashSet");

jedis.lpush("collections", "TreeSet");

jedis.lpush("collections", "TreeMap");

System.out.println("collections的內(nèi)容:"+jedis.lrange("collections", 0, -1));//-1代表倒數(shù)第一個元素挤渐,-2代表倒數(shù)第二個元素

System.out.println("collections區(qū)間0-3的元素:"+jedis.lrange("collections",0,3));

System.out.println("===============================");

// 刪除列表指定的值 苹享,第二個參數(shù)為刪除的個數(shù)(有重復(fù)時),后add進去的值先被刪,類似于出棧

System.out.println("刪除指定元素個數(shù):"+jedis.lrem("collections", 2, "HashMap"));

System.out.println("collections的內(nèi)容:"+jedis.lrange("collections", 0, -1));

System.out.println("刪除下表0-3區(qū)間之外的元素:"+jedis.ltrim("collections", 0, 3));

System.out.println("collections的內(nèi)容:"+jedis.lrange("collections", 0, -1));

System.out.println("collections列表出棧(左端):"+jedis.lpop("collections"));

System.out.println("collections的內(nèi)容:"+jedis.lrange("collections", 0, -1));

System.out.println("collections添加元素得问,從列表右端囤攀,與lpush相對應(yīng):"+jedis.rpush("collections", "EnumMap"));

System.out.println("collections的內(nèi)容:"+jedis.lrange("collections", 0, -1));

System.out.println("collections列表出棧(右端):"+jedis.rpop("collections"));

System.out.println("collections的內(nèi)容:"+jedis.lrange("collections", 0, -1));

System.out.println("修改collections指定下標(biāo)1的內(nèi)容:"+jedis.lset("collections", 1, "LinkedArrayList"));

System.out.println("collections的內(nèi)容:"+jedis.lrange("collections", 0, -1));

System.out.println("===============================");

System.out.println("collections的長度:"+jedis.llen("collections"));

System.out.println("獲取collections下標(biāo)為2的元素:"+jedis.lindex("collections", 2));

System.out.println("===============================");

jedis.lpush("sortedList", "3","6","2","0","7","4");

System.out.println("sortedList排序前:"+jedis.lrange("sortedList", 0, -1));

System.out.println(jedis.sort("sortedList"));

System.out.println("sortedList排序后:"+jedis.lrange("sortedList", 0, -1));

}

Set

/*

Set集合,和List類的區(qū)別就是

set中不會出現(xiàn)重復(fù)的數(shù)據(jù)

他可以進行聚合操作效率比較高

其余的操作基本上和list相同

*/

public class SetTest {

public Jedis jedis = JedisPoolUtil.getJedis();

@Test

/?添加元素刪除元素?/

public void fun(){

Long num = jedis.sadd("myset", "a", "a", "b","abc");

System.out.println(num);

}

@Test

/?獲得元素?/

public void fun1(){

Set<String> myset = jedis.smembers("myset");

System.out.println(myset);

}

@Test

/?移除元素?/

public void fun2(){

jedis.srem("myset","a","b");

Set<String> myset = jedis.smembers("myset");

System.out.println(myset);

}

@Test

//判斷是否這個set中存在某個值

public void fun3(){

Boolean sismember = jedis.sismember("myset", "a");

System.out.println(sismember);

}

@Test

//獲得A-B 獲得差集合

public void fun4(){

jedis.sadd("myset1","123","32","abc","def","123456","sdfasd");

jedis.sadd("myset2","abc","345","123","fda");

Set<String> sdiff = jedis.sdiff("myset1", "myset2");

System.out.println(sdiff);

}

@Test

//獲得交集

public void fun5(){

Set<String> sinter = jedis.sinter("myset1", "myset2");

System.out.println(sinter);

}

@Test

// 獲得并集合

public void fun6(){

Set<String> sunion = jedis.sunion("myset1", "myset2");

System.out.println(sunion);

}

@Test

// 成員數(shù)量

public void fun7(){

System.out.println(jedis.scard("myset1"));

}

@Test

// 獲得隨機的一個成員

public void fun8(){

System.out.println(jedis.srandmember("myset1"));

}

@Test

// 將相差的成員放到一個新的set中同理交集和并集都可以后面均

// 加上一個store即可

// 并返回新的長度

public void fun9(){

System.out.println(jedis.sdiffstore("myset3","myset1","myset2"));

System.out.println(jedis.smembers("myset3"));

}

}

SortedSet

/*

和set極為的類似宫纬,他們是字符串的集合焚挠,沒有重復(fù)的數(shù)據(jù)

差別是sortedset每個成員中都會有一個分?jǐn)?shù)(score)與之關(guān)聯(lián)

,redis正是通過分?jǐn)?shù)來為集合中的成員進行從小到大的排序

sortedset中數(shù)據(jù)必須單一但是他的score可以是重復(fù)的

*/

public class SortedsetTest {

public Jedis jedis = JedisPoolUtil.getJedis();

// 添加元素

@Test

public void fun(){

jedis.zadd("mysort",100.0, "zhangsan");

jedis.zadd("mysort",200.0,"lisi");

jedis.zadd("mysort",50.0,"wangwu");

Map<String ,Double>map = new HashMap<String ,Double>();

map.put("mutouliu",70.0);

jedis.zadd("mysort",map);Set mysort = jedis.zrange("mysort",0,-1);? System.out.println(mysort);Set mysort1 = jedis.zrange("mysort",1,2);? System.out.println(mysort1);

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漓骚,一起剝皮案震驚了整個濱河市蝌衔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝌蹂,老刑警劉巖噩斟,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孤个,居然都是意外死亡剃允,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門硼身,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硅急,“玉大人,你說我怎么就攤上這事佳遂∮啵” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵丑罪,是天一觀的道長荚板。 經(jīng)常有香客問我,道長吩屹,這世上最難降的妖魔是什么跪另? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮煤搜,結(jié)果婚禮上免绿,老公的妹妹穿的比我還像新娘。我一直安慰自己擦盾,他們只是感情好嘲驾,可當(dāng)我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迹卢,像睡著了一般辽故。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腐碱,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天誊垢,我揣著相機與錄音,去河邊找鬼。 笑死喂走,一個胖子當(dāng)著我的面吹牛殃饿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缴啡,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼壁晒,長吁一口氣:“原來是場噩夢啊……” “哼瓷们!你這毒婦竟也來了业栅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤谬晕,失蹤者是張志新(化名)和其女友劉穎碘裕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攒钳,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡帮孔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了不撑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片文兢。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖焕檬,靈堂內(nèi)的尸體忽然破棺而出姆坚,到底是詐尸還是另有隱情,我是刑警寧澤实愚,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布兼呵,位于F島的核電站,受9級特大地震影響腊敲,放射性物質(zhì)發(fā)生泄漏击喂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一碰辅、第九天 我趴在偏房一處隱蔽的房頂上張望懂昂。 院中可真熱鬧,春花似錦没宾、人聲如沸凌彬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饿序。三九已至,卻和暖如春羹蚣,著一層夾襖步出監(jiān)牢的瞬間原探,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咽弦,地道東北人徒蟆。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像型型,于是被迫代替她去往敵國和親段审。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內(nèi)容