Java連接redis及基本操作示例
本文實(shí)例講述了Java連接redis及基本操作。分享給大家供大家參考,具體如下:
點(diǎn)擊此處:本站下載安裝。
解壓安裝
啟動(dòng)redis:使用cd命令切換目錄到 D:\redis運(yùn)行redis-server.exe redis.windows.conf
默認(rèn)端口為6379
訪問:切換到redis目錄下運(yùn)行 redis-cli.exe -h 127.0.0.1 -p 6379
。
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>testRedis</groupId> <artifactId>testRedis</artifactId> <version>0.0.1-SNAPSHOT</version> <build/> <dependencies> <!-- Redis NoSQL 操作依賴 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.1.0</version> </dependency> </dependencies> </project>
測試代碼:
package com.crisy.redis; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; public class RedisClient { /** * 一般項(xiàng)目基本都使用非切片池; * 切片池主要用于分布式項(xiàng)目,可以設(shè)置主從Redis庫 */ private Jedis jedis;//非切片客戶端連接 private JedisPool jedisPool;//非切片連接池 private ShardedJedis shardedJedis;//切片客戶端連接 private ShardedJedisPool shardedJedisPool;//切片連接池 public RedisClient(){ initialPool(); //初始化非切片連接池 initialShardedPool(); //初始化切片連接池 shardedJedis = shardedJedisPool.getResource(); jedis = jedisPool.getResource(); } private void initialPool() { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxActive(20); config.setMaxIdle(5); config.setMaxWait(100001); config.setTestOnBorrow(false); jedisPool = new JedisPool(config,"127.0.0.1",6379); } private void initialShardedPool() { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxActive(20); config.setMaxIdle(5); config.setMaxWait(100001); config.setTestOnBorrow(false); //slave連接 List<JedisShardInfo> shardInfos = new ArrayList<JedisShardInfo>(); shardInfos.add(new JedisShardInfo("127.0.0.1",6379,"master")); //構(gòu)造池 shardedJedisPool = new ShardedJedisPool(config, shardInfos); } public void show(){ System.out.println("----對(duì)Value操作的命令----"); valueOperate(); System.out.println("----對(duì)String操作的命令----"); stringOperator(); System.out.println("----對(duì)List操作的命令----"); listOperator(); System.out.println("----對(duì)Set操作的命令----"); setOperator(); System.out.println("----對(duì)hash操作的命令----"); hashOperate(); } /** * 對(duì)Value操作的命令 * @throws InterruptedException */ private void valueOperate(){ System.out.println("清空當(dāng)前選擇庫中所有key:"+jedis.flushDB()); System.out.println("清空所有庫中所有key:"+jedis.flushAll()); System.out.println("判斷myKey鍵是否存在:"+shardedJedis.exists("myKey")); System.out.println("新增myKey:"+shardedJedis.set("myKey","myValue")); System.out.println("判斷myKey鍵是否存在:"+shardedJedis.exists("myKey")); System.out.println("查看myKey所儲(chǔ)存的值的類型:"+jedis.type("myKey")); System.out.println("重命名myKey-myKey_1:"+jedis.rename("myKey", "myKey_1")); System.out.println("判斷myKey鍵是否存在:"+shardedJedis.exists("myKey")); System.out.println("判斷myKey_1鍵是否存在:"+shardedJedis.exists("myKey_1")); System.out.println("新增myKey_2:"+shardedJedis.set("myKey_2","myValue_2")); System.out.println("查看索引為0的Key:"+jedis.select(0)); System.out.println("當(dāng)前數(shù)據(jù)庫中key的數(shù)目:"+jedis.dbSize()); System.out.println("系統(tǒng)中所有鍵如下:"); //返回滿足給定pattern的所有key Set<String> keys = jedis.keys("*"); Iterator<String> it=keys.iterator() ; while(it.hasNext()){ String key = it.next(); System.out.println(key); } //刪除時(shí),如果不存在忽略此命令 System.out.println("系統(tǒng)中刪除myKey_3: "+jedis.del("myKey_3")); System.out.println("系統(tǒng)中刪除myKey_2: "+jedis.del("myKey_2")); System.out.println("判斷myKey_2是否存在:"+shardedJedis.exists("myKey_2")); System.out.println("設(shè)置 myKey_1的過期時(shí)間為5秒:"+jedis.expire("myKey_1", 5)); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //沒有設(shè)置過期時(shí)間或者不存在的都返回-1 System.out.println("獲得myKey_1的剩余活動(dòng)時(shí)間:"+jedis.ttl("myKey_1")); System.out.println("取消設(shè)置myKey_1的活動(dòng)時(shí)間:"+jedis.persist("myKey_1")); System.out.println("查看myKey_1的剩余活動(dòng)時(shí)間:"+jedis.ttl("myKey_1")); } /** * 對(duì)String操作的命令 */ private void stringOperator(){ System.out.println("清空當(dāng)前選擇庫中所有key:"+jedis.flushDB()); System.out.println("給數(shù)據(jù)庫中名稱為key01的string賦予值value:"+jedis.set("key01", "value01")); System.out.println("給數(shù)據(jù)庫中名稱為key02的string賦予值value:"+jedis.set("key02", "value02")); System.out.println("給數(shù)據(jù)庫中名稱為key03的string賦予值value:"+jedis.set("key03", "value03")); System.out.println("返回?cái)?shù)據(jù)庫中名稱為key01的string的value:"+jedis.get("key01")); System.out.println("返回庫中多個(gè)string的value:"+jedis.mget("key01","key02","key03")); System.out.println("添加string,名稱為key,值為value:"+jedis.setnx("key04","value04")); System.out.println("向庫中添加string,設(shè)定過期時(shí)間time:"+jedis.setex("key05",5,"value05")); System.out.println("批量設(shè)置多個(gè)string的值:"+jedis.mset("key06_1","value06_1","key06_2","value06_2")); System.out.println("給數(shù)據(jù)庫中名稱為key07的string賦予值value:"+jedis.set("key07", "1")); System.out.println("名稱為key07的string增1操作:"+jedis.incr("key07")); //ERR value is not an integer or out of range //System.out.println("名稱為key01的string增1操作:"+jedis.incr("key01")); System.out.println("名稱為key07的string增加integer:"+jedis.incrBy("key07", 5)); System.out.println("名稱為key07的string減1操作:"+jedis.decr("key07")); System.out.println("名稱為key07的string減少integer:"+jedis.decrBy("key07", 3)); System.out.println("名稱為key的string的值附加value:"+jedis.append("key01","Hello World")); System.out.println("返回名稱為key的string的value的子串:"+jedis.substr("key01",0,5)); } /** * 對(duì)List操作的命令 */ private void listOperator(){ System.out.println("清空當(dāng)前選擇庫中所有key:"+jedis.flushDB()); //準(zhǔn)備兩個(gè)list shardedJedis.lpush("mylist", "Java"); shardedJedis.lpush("mylist", "C"); shardedJedis.lpush("mylist", "C++"); shardedJedis.lpush("mylist", "Java"); System.out.println("在名稱為mylist的list尾添加一個(gè)值為value的元素:"+jedis.rpush("mylist","phython")); System.out.println("在名稱為mylist的list頭添加一個(gè)值為value的 元素:"+jedis.rpush("mylist","PHP")); System.out.println("返回名稱為mylist的list的長度:"+jedis.llen("mylist")); System.out.println("返回名稱為mylist中start至end之間的元素:"+jedis.lrange("mylist",0,3)); System.out.println("截取名稱為mylist的list:"+jedis.ltrim("mylist",0,3)); System.out.println("返回名稱為mylist的list中index位置的元素:"+jedis.lindex("mylist",0)); System.out.println("給名稱為mylist的list中index位置的元素賦值:"+jedis.lset("mylist",0,"hahahahah我改啦")); System.out.println("刪除count個(gè)mylist的key中值為value的元素:"+jedis.lrem("mylist",1,"Java")); System.out.println("返回并刪除名稱為mylist的list中的首元素:"+jedis.lpop("mylist")); System.out.println("返回并刪除名稱為mylist的list中的尾元素:"+jedis.rpop("mylist")); } /** * 對(duì)Set操作的命令 */ private void setOperator(){ System.out.println("清空當(dāng)前選擇庫中所有key:"+jedis.flushDB()); //準(zhǔn)備兩個(gè)set jedis.sadd("myset","hahaha"); jedis.sadd("myset","hahaha"); jedis.sadd("myset","lalala"); jedis.sadd("myset","kakaka"); jedis.sadd("myset2","hahaha"); jedis.sadd("myset2","lalala"); jedis.sadd("myset2","kakaka"); System.out.println("向名稱為myset的set中添加元素member:"+jedis.sadd("myset","wawawa")); System.out.println("返回名稱為myset的set的所有元素:"+jedis.smembers("myset")); System.out.println("刪除名稱為myset的set中的元素member:"+jedis.srem("myset","wawawa")); System.out.println("返回名稱為myset的set的所有元素:"+jedis.smembers("myset")); System.out.println("隨機(jī)返回并刪除名稱為myset的set中一個(gè)元素:"+jedis.spop("myset")); System.out.println("移到集合元素:"+jedis.smove("myset","myset2","hahaha")); System.out.println("返回名稱為myset的set的所有元素:"+jedis.smembers("myset")); System.out.println("返回名稱為myset2的set的所有元素:"+jedis.smembers("myset2")); System.out.println("返回名稱為mykey的set的基數(shù):"+jedis.scard("myset")); System.out.println("member是否是名稱為mykey的set的元素:"+jedis.sismember("myset","hahaha")); System.out.println("求交集:"+jedis.sinter("myset","myset2")); System.out.println("求交集并將交集保存到dstkey的集合:"+jedis.sinterstore("dstkey","myset2","myset")); System.out.println("返回名稱為dstkey的set的所有元素:"+jedis.smembers("dstkey")); System.out.println("求并集:"+jedis.sunion("myset","myset2")); System.out.println("求并集并將并集保存到dstkey的集合:"+jedis.sinterstore("dstkey","myset2","myset")); System.out.println("返回名稱為dstkey的set的所有元素:"+jedis.smembers("dstkey")); System.out.println("求差集:"+jedis.sdiff("myset2","myset")); System.out.println("求差集并將差集保存到dstkey的集合:"+jedis.sdiffstore("dstkey","myset2","myset")); System.out.println("返回名稱為dstkey的set的所有元素:"+jedis.smembers("dstkey")); System.out.println("隨機(jī)返回名稱為dstkey的set的一個(gè)元素:"+jedis.srandmember("dstkey")); } /** * hash */ private void hashOperate(){ System.out.println(jedis.flushDB()); System.out.println("向名稱為key的hash中添加元素field1:"+shardedJedis.hset("key", "field1", "value1")); System.out.println("向名稱為key的hash中添加元素field2:"+shardedJedis.hset("key", "field2", "value2")); System.out.println("向名稱為key的hash中添加元素field3:"+shardedJedis.hset("key", "field3", "value3")); System.out.println("返回名稱為key的hash中field1對(duì)應(yīng)的value:"+shardedJedis.hget("key", "field1")); System.out.println("返回名稱為key的hash中field1對(duì)應(yīng)的value:"+shardedJedis.hmget("key", "field1","field2","field3")); System.out.println("刪除名稱為key的hash中鍵為field1的域:"+shardedJedis.hdel("key", "field1")); System.out.println("返回名稱為key的hash中所有鍵對(duì)應(yīng)的value:"+shardedJedis.hvals("key")); System.out.println("返回名稱為key的hash中元素個(gè)數(shù):"+shardedJedis.hlen("key")); System.out.println("返回名稱為key的hash中所有鍵:"+shardedJedis.hkeys("key")); System.out.println("返回名稱為key的hash中所有的鍵(field)及其對(duì)應(yīng)的value:"+shardedJedis.hgetAll("key")); System.out.println("名稱為key的hash中是否存在鍵為field1的域:"+shardedJedis.hexists("key","field1")); } }
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java+MySQL數(shù)據(jù)庫程序設(shè)計(jì)總結(jié)》、《Java操作Excel技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java文件與目錄操作技巧匯總》及《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法
這篇文章主要介紹了SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03java保留小數(shù)的四種實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了java保留小數(shù)的四種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Java中Integer的parseInt和valueOf的區(qū)別詳解
這篇文章主要介紹了Java中Integer的parseInt和valueOf的區(qū)別詳解,nteger.parseInt(s)是把字符串解析成int基本類型,Integer.valueOf(s)是把字符串解析成Integer對(duì)象類型,其實(shí)int就是Integer解包裝,Integer就是int的包裝,需要的朋友可以參考下2023-11-11Java導(dǎo)出Execl疑難點(diǎn)處理的實(shí)現(xiàn)
這篇文章主要介紹了Java導(dǎo)出Execl疑難點(diǎn)處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Java微信公眾平臺(tái)開發(fā)(14) 微信web開發(fā)者工具使用
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第十四步,微信web開發(fā)者工具的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04SpringBoot+WebSocket實(shí)現(xiàn)多人在線聊天案例實(shí)例
本文主要介紹了SpringBoot+WebSocket實(shí)現(xiàn)多人在線聊天案例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02java發(fā)送HttpClient請(qǐng)求及接收請(qǐng)求結(jié)果過程的簡單實(shí)例
下面小編就為大家?guī)硪黄猨ava發(fā)送HttpClient請(qǐng)求及接收請(qǐng)求結(jié)果過程的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11java實(shí)現(xiàn)區(qū)域內(nèi)屏幕截圖示例
這篇文章主要介紹了java截圖示例,需要的朋友可以參考下2014-04-04一文學(xué)會(huì)如何在SpringBoot中使用線程池執(zhí)行定時(shí)任務(wù)
在開發(fā)現(xiàn)代應(yīng)用程序時(shí),定時(shí)任務(wù)是一項(xiàng)常見的需求,SpringBoot提供了一個(gè)強(qiáng)大的定時(shí)任務(wù)框架,可以輕松地執(zhí)行各種定時(shí)任務(wù),結(jié)合線程池的使用,可以更好地管理任務(wù)的執(zhí)行,提高系統(tǒng)的性能和穩(wěn)定性,本文將介紹如何在Spring Boot中使用線程池執(zhí)行定時(shí)任務(wù)2023-06-06