redis 是一個高性能的非關係型key-value數據庫。redis支持存儲string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型),爲了保證效率,數據都是緩存在內存中。區別的是redis有着持久化的機制,redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件。redis非常快,每秒可執行大約110000次的設置(SET)操作,每秒大約可執行81000次的讀取/獲取(GET)操作。一般我們來使用redis做緩存。當然,redis也可以做消息隊列,但是在性能方面,redis做消息隊列存在一些問題,筆者在後面會進行講解。
關於redis的安裝,請見筆者博客,連接地址爲:https://blog.csdn.net/m0_38075425/article/details/81178573
下面介紹java對redis的基本操作:
1.首先是pom依賴:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2.java代碼:
public class RedisDemo {
public static void main(String args[]){
RedisDemo redisDemo = new RedisDemo();
redisDemo.optionString();
redisDemo.optionList();
redisDemo.optionSet();
redisDemo.optionMap();
}
public static JedisPool initRedis(){
//Jedis連接池
JedisPoolConfig config = new JedisPoolConfig();
// 最大空閒連接數
config.setMaxIdle(8);
// 最大連接數
config.setMaxTotal(8);
// 獲取連接的最大等待時間,如果超時就拋出異常
config.setMaxWaitMillis(1000);
//參數分別爲Jedis連接池實例、redis服務器地址、redis端口號、超時時間、密碼(默認爲空)、數據庫索引(從0開始)
JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000, null, 0);
return jedisPool;
}
//字符串操作
public void optionString(){
Jedis jedis = initRedis().getResource();
jedis.set("option_string", "字符串存放測試");
System.out.println("字符串取值:" + jedis.get("option_string"));
jedis.append("option_string", "追加之後的");
System.out.println("字符串取值:" + jedis.get("option_string"));
jedis.del("option_string");
System.out.println("字符串取值:" + jedis.get("option_string"));
jedis.close();
}
//list操作
public void optionList(){
Jedis jedis = initRedis().getResource();
jedis.lpush("option_list", "l1"); // 從左邊插入
jedis.lpush("option_list", "l2");
jedis.lpush("option_list", "l3");
jedis.lpush("option_list", "l4");
//jedis.rpush()方法爲從右邊插入
// 從左到右遍歷,3個參數分別是,key,開始位置,結束位置(-1代表到最後)
List<String> list = jedis.lrange("option_list", 0, -1);
System.out.println("List中的值爲:" + list.toString());
jedis.lpop("option_list");
//jedis.lpop爲刪除右邊
// 從左到右遍歷,3個參數分別是,key,開始位置,結束位置(-1代表到最後)
List<String> list2 = jedis.lrange("option_list", 0, -1);
System.out.println("List中的值爲:" + list.toString());
jedis.del("option_list");
System.out.println("字符串取值:" + jedis.get("option_list"));
jedis.close();
}
//set
public void optionSet(){
Jedis jedis = initRedis().getResource();
// 添加元素,不可重複
jedis.sadd("option_set", "s1", "s2", "s3", "s4");
// 獲取集合中的全部元素
Set<String> set = jedis.smembers("option_set");
System.out.println("option_set:" + set);
// 求集合的長度
long length = jedis.scard("option_set");
System.out.println("option_set:" + length);
// 從option_set移除s2
jedis.srem("option_set", "");
set = jedis.smembers("option_set");
System.out.println("從option_set中獲取移除後的的元素:" + set);
// 判斷元素是否包含在該集合中
boolean exist = jedis.sismember("option_set", "s4");
System.out.println("檢查lida是否包含在option_set中:" + exist);
// 隨機的移除option_set中的一個元素,並返回它
String spop = jedis.spop("option_set");
System.out.println("option_set中被隨機移除的元素是:" + spop);
jedis.del("option_set");
System.out.println("字符串取值:" + jedis.get("option_set"));
jedis.close();
}
//map
public void optionMap(){
Jedis jedis = initRedis().getResource();
Map<String, String> map = new HashMap<String, String>();
map.put("k1", "v1");
map.put("k2", "v2");
map.put("k3", "v3");
map.put("k4", "1");
// 存放一個map
jedis.hmset("option_map", map);
// 從redis中取map
Map<String, String> getMap = jedis.hgetAll("option_map");
System.out.println("從redis中取回的option_map:" + getMap.toString());
System.out.println();
// 從map中取回一個或多個字段信息
List<String> hmget = jedis.hmget("option_map", "k1", "k3");
System.out.println("從option_map中兩個字段來看看:" + hmget);
System.out.println();
// 刪除map中的一個或者多個字段
jedis.hdel("option_map", "k1");
getMap = jedis.hgetAll("option_map");
System.out.println("從redis中取回的被刪除後的option_map:" + getMap);
System.out.println();
// 求出集合的長度
long length = jedis.hlen("option_map");
System.out.println("option_map的長度爲:" + length);
System.out.println();
// 判斷某個字段是否存在於map中
boolean exists = jedis.hexists("option_map", "k5");
System.out.println("k5字段是否存在於option_map中:" + exists);
System.out.println();
// 獲取map的所有字段名
Set<String> keys = jedis.hkeys("option_map");
System.out.println("option_map的所有字段名:" + keys);
System.out.println();
// 獲取map的所有字段值,實質的方法實現
List<String> values = jedis.hvals("option_map");
System.out.println("option_map的所有字段值:" + values);
System.out.println();
// 給map的某個字段進行加法運算
jedis.hincrBy("option_map", "k4", 10);
System.out.println("執行加法運行後的option_map:" + jedis.hgetAll("option_map"));
System.out.println();
// 刪除map
jedis.del("option_map");
System.out.println("刪除option_map後,option_map是否還存在redis中:" + jedis.exists("option_map"));
System.out.println();
System.out.println();
jedis.close();
}
}
關於各個方法,請見代碼的註釋。