一,初始Redis
什麼是Redis?
簡介
Redis 是完全開源免費的,遵守BSD協定,是一個高性能的key-value資料庫。
特點
- 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的資料類型 – Redis支援二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料類型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。
- 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。
Redis安裝
redis的安裝可以參考 菜鳥教程
在Redis安裝完成之後,便可以啟動redis
二,初始Jedis
什麼是jedis
jedis是redis官方推薦的一個面向java的用戶端,java程式可以通過jedis操作redis,jedis對redis的很多指令都進行了封裝,友善開發者調用
通過jedis連接配接redis
導包
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.5.0</version>
</dependency>
簡單擷取Jedis連接配接
/**
* 連接配接Jedis --- 單執行個體連接配接
* @param ip
* @param port
*/
public Jedis connectToJedis(String ip,int port){
Jedis jedis = new Jedis(ip,port);
System.out.println("Jedis連接配接成功!");
return jedis;
}
基于連接配接池擷取Jedis連接配接
基于連接配接池的連接配接是基于commons-pool實作
/**
* 配置jedis連接配接池
* @return
*/
@Bean
public JedisPoolConfig getJedisPoolConfig(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//連接配接池中最大連接配接數
jedisPoolConfig.setMaxTotal(10);
//連接配接池中最大空閑連接配接數
jedisPoolConfig.setMaxIdle(5);
return jedisPoolConfig;
}
/**
* 基于連接配接池擷取jedis連接配接
* @param ip
* @param port
* @return
*/
public Jedis getJedisFromJedisPool(String ip,int port){
JedisPool jedisPool = new JedisPool(getJedisPoolConfig(),ip,port);
Jedis jedis = jedisPool.getResource();
System.out.println("擷取Jedis連接配接");
return jedis;
}
三,Redis資料類型
String字元串類型
常用指令: set,get,decr,incr,mget 等。
String資料結構是簡單的key-value類型,value其實不僅可以是String,也可以是數字。 正常key-value緩存應用; 正常計數:微網誌數,粉絲數等
hash哈希鍵值對類型
常用指令: hget,hset,hgetall 等。
hash 是一個 string 類型的 field 和 value 的映射表,hash 特别适合用于存儲對象,後續操作的時候,你可以直接僅僅修改這個對象中的某個字段的值。 比如我們可以 hash 資料結構來存儲使用者資訊,商品資訊等等。比如下面我就用 hash 類型存放了我本人的一些資訊:
key=JavaUser293847
value={
“id”: 1,
“name”: “SnailClimb”,
“age”: 22,
“location”: “Wuhan, Hubei”
}
list表類型
常用指令: lpush,rpush,lpop,rpop,lrange等
list 就是連結清單,Redis list 的應用場景非常多,也是Redis最重要的資料結構之一,比如微網誌的關注清單,粉絲清單,消息清單等功能都可以用Redis的 list 結構來實作。
Redis list 的實作為一個雙向連結清單,即可以支援反向查找和周遊,更友善操作,不過帶來了部分額外的記憶體開銷。
另外可以通過 lrange 指令,就是從某個元素開始讀取多少個元素,可以基于 list 實作分頁查詢,這個很棒的一個功能,基于 redis 實作簡單的高性能分頁,可以做類似微網誌那種下拉不斷分頁的東西(一頁一頁的往下走),性能高。
Set集合類型
常用指令: sadd,spop,smembers,sunion 等
set 對外提供的功能與list類似是一個清單的功能,特殊之處在于 set 是可以自動排重的。
當你需要存儲一個清單資料,又不希望出現重複資料時,set是一個很好的選擇,并且set提供了判斷某個成員是否在一個set集合内的重要接口,這個也是list所不能提供的。可以基于 set 輕易實作交集、并集、差集的操作。
比如:在微網誌應用中,可以将一個使用者所有的關注人存在一個集合中,将其所有粉絲存在一個集合。Redis可以非常友善的實作如共同關注、共同粉絲、共同喜好等功能。這個過程也就是求交集的過程,具體指令如下:
sinterstore key1 key2 key3 将交集存在key1内
ZSet有序集合類型
常用指令: zadd,zrange,zrem,zcard等
和set相比,sorted set增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列。
舉例: 在直播系統中,實時排行資訊包含直播間線上使用者清單,各種禮物排行榜,彈幕消息(可以了解為按消息次元的消息排行榜)等資訊,适合使用 Redis 中的 Sorted Set 結構進行存儲。
四,通過jedis操作redis
jedis封裝了很多redis指令,可以參考我的github,暫時隻是寫了jedis那部分,如果覺得對讀者有幫助,可以點個小星星支援一下哈,我也很榮幸能幫到有緣人
github