學習目標
redis不僅可以通過命令行進行操作,同時redis也可以通過javaAPI進行操作,我們可以通過使用javaAPI來對redis數據庫當中的各種數據類型進行操作
第一步:創建maven工程並導入jar包
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!-- <verbal>true</verbal>-->
</configuration>
</plugin>
</plugins>
</build>
第二步:連接以及關閉redis客戶端
private JedisPool jedisPool;
private JedisPoolConfig config;
@BeforeTest
public void redisConnectionPool(){
config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxWaitMillis(3000);
config.setMaxTotal(50);
config.setMinIdle(5);
jedisPool = new JedisPool(config, "node01", 6379);
}
@AfterTest
public void closePool(){
jedisPool.close();
}
第三步:redis的javaAPI操作
操作string類型數據
/**
* 添加string類型數據
*/
@Test
public void addStr(){
Jedis resource = jedisPool.getResource();
//添加
resource.set("jediskey", "jedisvalue");
//查詢
String jediskey = resource.get("jediskey");
System.out.println(jediskey);
//修改
resource.set("jediskey","jedisvalueUpdate");
//刪除
resource.del("jediskey");
//實現整型數據的增長操作
resource.incr("jincr");
resource.incrBy("jincr",3);
String jincr = resource.get("jincr");
System.out.println(jincr);
resource.close();
}
操作hash列表類型數據
/**
* 操作hash類型數據
*/
@Test
public void hashOperate(){
Jedis resource = jedisPool.getResource();
//添加數據
resource.hset("jhsetkey","jmapkey","jmapvalue");
resource.hset("jhsetkey","jmapkey2","jmapvalue2");
//獲取所有數據
Map<String, String> jhsetkey = resource.hgetAll("jhsetkey");
for (String s : jhsetkey.keySet()) {
System.out.println(s);
}
//修改數據
resource.hset("jhsetkey","jmapkey2","jmapvalueupdate2");
Map<String, String> jhsetkey2 = resource.hgetAll("jhsetkey");
for (String s : jhsetkey2.keySet()) {
System.out.println("修改數據打印"+s);
}
//刪除數據
resource.del("jhsetkey");
Set<String> jhsetkey1 = resource.keys("jhsetkey");
for (String result : jhsetkey1) {
System.out.println(result);
}
}
操作list類型數據
/**
* 操作list類型的數據
*/
@Test
public void listOperate(){
Jedis resource = jedisPool.getResource();
//從左邊插入元素
resource.lpush("listkey","listvalue1","listvalue1","listvalue2");
//從右邊移除元素
resource.rpop("listkey");
//獲取所有值
List<String> listkey = resource.lrange("listkey", 0, -1);
for (String s : listkey) {
System.out.println(s);
}
resource.close();
}
操作set類型的數據
/**
* set類型數據操作
*/
@Test
public void setOperate(){
Jedis resource = jedisPool.getResource();
//添加數據
resource.sadd("setkey", "setvalue1", "setvalue1", "setvalue2", "setvalue3");
//查詢數據
Set<String> setkey = resource.smembers("setkey");
for (String s : setkey) {
System.out.println(s);
}
//移除掉一個數據
resource.srem("setkey","setvalue3");
resource.close();
}
練習題
使用List實現以下功能(javaAPI)
練習:
1、創建兩個list 名字分別爲ltest1 ltest2.
2、Ltest1 從左到右爲1 2 3 4 5 6 7 8 9,ltest2 從左到右爲 f e d c b a
3、在Ltest1的3 左邊插入3333
4、在6右邊插入6666
5、通過索引查詢Ltest2 索引爲3的數據
6、將ltest2的e 修改爲EEE
7、只保留ltest2的EEE d c b
8、移除ltest1右邊一個數據並插入ltest2的左邊
package HomeWork;
import redis.clients.jedis.BinaryClient;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.List;
/**
* @Author wzc
* @Version v 1.0
* @Date 2020/3/15 16:52
*/
public class HomeWork01 {
public static void main(String[] args) {
//1、設置數據庫連接池
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//2、設置連接池的最大連接數
jedisPoolConfig.setMaxTotal(50);
//3、設置最大空閒數
jedisPoolConfig.setMaxIdle(10);
//4、設置最小空閒數
jedisPoolConfig.setMinIdle(5);
//5、設置連接最大等待時間(超時時間)
jedisPoolConfig.setMaxWaitMillis(10000);
//6、獲取redis連接池
JedisPool jedisPool = new JedisPool(jedisPoolConfig, "node01", 6379);
//7、獲取redis連接對象
Jedis jedis = jedisPool.getResource();
//8、通過對象調用API
//創建兩個list,名字分別爲 ltest1;ltest1 從左到右爲1 2 3 4 5 6 7 8 9
//創建兩個list,名字分別爲 ltest2;ltest2 從左到右爲 f e d c b a
jedis.lpush("ltest1", "9", "8", "7", "6", "5", "4", "3", "2", "1");
jedis.lpush("ltest2", "a", "b", "c", "d", "e", "f");
//在Ltest1的3 左邊插入3333
jedis.linsert("ltest1", BinaryClient.LIST_POSITION.BEFORE, "3", "3333");
//在6右邊插入6666
jedis.linsert("ltest1", BinaryClient.LIST_POSITION.AFTER, "6", "6666");
//通過索引查詢Ltest2 索引爲3的數據
jedis.lindex("ltest2", 3);
//將ltest2的e 修改爲EEE
jedis.lset("ltest2", 1, "EEE");
//只保留ltest2的EEE d c b
jedis.ltrim("ltest2", 1, 4);
//移除ltest1右邊一個數據並插入ltest2的左邊
jedis.rpoplpush("ltest1", "ltest2");
//查詢ltest1 所有數據並打印
List<String> ltest1 = jedis.lrange("ltest1", 0, -1);
for (String s : ltest1) {
System.out.println("ltest1所有數據:" + s);
}
System.out.println("-----------------------");
//查詢ltest2 所有數據並打印
jedis.lrange("ltest1", 0, -1);
List<String> ltest2 = jedis.lrange("ltest2", 0, -1);
for (String s : ltest2) {
System.out.println("ltest2所有數據:" + s);
}
}
}
**最終結果 **
使用Set實現以下功能(javaAPI)
練習:
1、添加set 集合 setdemo1(aa,bb,cc,dd,ee,ff) setdemo2(11,22,33,dd,ee,ff)
2、將兩個集合的交集寫入setdemo3
3、將兩個集合的並集寫入setdemo4
4、將setdemo2集合與setdemo1集合的差集寫入setdemo5
5、將setdemo2內的11 移動到setdemo1內
6、刪除setdemo1內的bb
package HomeWork;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.Set;
/**
* @Author wzc
* @Version v 1.0
* @Date 2020/3/15 17:48
*/
public class HomeWork02 {
public static void main(String[] args) {
//1、設置數據庫連接池
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//2、設置連接池的最大連接數
jedisPoolConfig.setMaxTotal(50);
//3、設置最大空閒數
jedisPoolConfig.setMaxIdle(10);
//4、設置最小空閒數
jedisPoolConfig.setMinIdle(5);
//5、設置連接最大等待時間(超時時間)
jedisPoolConfig.setMaxWaitMillis(10000);
//6、獲取redis連接池
JedisPool jedisPool = new JedisPool(jedisPoolConfig, "node01", 6379);
//7、獲取redis連接對象
Jedis jedis = jedisPool.getResource();
//8、通過對象調用API
//添加set 集合 setdemo1(aa,bb,cc,dd,ee,ff) setdemo2(11,22,33,dd,ee,ff)
jedis.sadd("setdemo1", "aa","bb","cc","dd","ee","ff");
jedis.sadd("setdemo2", "11","22","33","dd","ee","ff");
//將兩個集合的交集寫入setdemo3
jedis.sinterstore("setdemo3", "setdemo1","setdemo2");
//將兩個集合的並集寫入setdemo4
jedis.sunionstore("setdemo4","setdemo1","setdemo2");
//將setdemo2集合與setdemo1集合的差集寫入setdemo5
jedis.sdiffstore("setdemo5","setdemo2","setdemo1");
//將setdemo2內的11 移動到setdemo1內
jedis.smove("setdemo2", "setdemo1", "11");
//刪除setdemo1內的bb
jedis.srem("setdemo1", "bb");
//查詢各set集合所有數據,並打印
Set<String> setdemo1 = jedis.smembers("setdemo1");
Set<String> setdemo2 = jedis.smembers("setdemo2");
Set<String> setdemo3 = jedis.smembers("setdemo3");
Set<String> setdemo4 = jedis.smembers("setdemo4");
Set<String> setdemo5 = jedis.smembers("setdemo5");
System.out.println("以下爲setdemo1所有數據");
for (String s : setdemo1) {
System.out.println(s);
}
System.out.println("以下爲setdemo2所有數據");
for (String s : setdemo2) {
System.out.println(s);
}
System.out.println("以下爲setdemo3所有數據");
for (String s : setdemo3) {
System.out.println(s);
}
System.out.println("以下爲setdemo4所有數據");
for (String s : setdemo4) {
System.out.println(s);
}
System.out.println("以下爲setdemo5所有數據");
for (String s : setdemo5) {
System.out.println(s);
}
}
}
最終結果