jedis是使用java代碼操做redis數據庫的,jedis和redis的關係,就至關於JDBC和MySql的關係java
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
複製代碼
public class RedisTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
// jedis的方法和redis的命令一一對應
jedis.set("username","zhansan");
jedis.close();
}
}
複製代碼
Jedis鏈接池:建立一個鏈接池對象,每次須要操做 redis數據庫,都從鏈接池中獲取 jedis對象 使用完畢,jedis對象又從新放回鏈接池。若是Jedis在使用過程當中出錯,則也須要還給JedisPoolredis
鏈接池參數配置spring
JedisPool的配置參數大部分是由JedisPoolConfig的對應項來賦值的。數據庫
maxActive:控制一個pool可分配多少個jedis實例,經過pool.getResource()來獲取;若是賦值爲-1,則表示不限制;若是pool已經分配了maxActive個jedis實例,則此時pool的狀態爲exhausted。緩存
maxIdle:控制一個pool最多有多少個狀態爲idle(空閒)的jedis實例;bash
whenExhaustedAction:表示當pool中的jedis實例都被allocated完時,pool要採起的操做;默認有三種。工具
WHEN_EXHAUSTED_FAIL --> 表示無jedis實例時,直接拋出NoSuchElementException;測試
WHEN_EXHAUSTED_BLOCK --> 則表示阻塞住,或者達到maxWait時拋出JedisConnectionException;ui
WHEN_EXHAUSTED_GROW --> 則表示新建一個jedis實例,也就說設置的maxActive無用;spa
maxWait:表示當borrow一個jedis實例時,最大的等待時間,若是超過等待時間,則直接拋JedisConnectionException;
testOnBorrow:得到一個jedis實例的時候是否檢查鏈接可用性(ping());若是爲true,則獲得的jedis實例均是可用的;
testOnReturn:return 一個jedis實例給pool時,是否檢查鏈接可用性(ping());
testWhileIdle:若是爲true,表示有一個idle object evitor線程對idle object進行掃描,若是validate失敗,此object會被從pool中drop掉;這一項只有在timeBetweenEvictionRunsMillis大於0時纔有意義;
timeBetweenEvictionRunsMillis:表示idle object evitor兩次掃描之間要sleep的毫秒數;
numTestsPerEvictionRun:表示idle object evitor每次掃描的最多的對象數;
minEvictableIdleTimeMillis:表示一個對象至少停留在idle狀態的最短期,而後才能被idle object evitor掃描並驅逐;這一項只有在timeBetweenEvictionRunsMillis大於0時纔有意義;
softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基礎上,加入了至少minIdle個對象已經在pool裏面了。若是爲-1,evicted不會根據idle time驅逐任何對象。若是minEvictableIdleTimeMillis>0,則此項設置無心義,且只有在timeBetweenEvictionRunsMillis大於0時纔有意義;
lifo:borrowObject返回對象時,是採用DEFAULT_LIFO(last in first out,即相似cache的最頻繁使用隊列),若是爲False,則表示FIFO隊列;
其中JedisPoolConfig對一些參數的默認設置以下:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1
package com.baizhi.redis;
import redis.clients.jedis.JedisPool;
package com.atguigu.redis.test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisUtils {
//被volatile修飾的變量不會被本地線程緩存,對該變量的讀寫都是直接操做共享內存。
private static volatile JedisPool jedisPool = null;
private JedisUtils() {}
public static JedisPool getJedisPoolInstance() {
if(null == jedisPool)
{
synchronized (JedisUtils.class)
{
if(null == jedisPool)
{
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxActive(1000);
poolConfig.setMaxIdle(32);
poolConfig.setMaxWait(100*1000);
poolConfig.setTestOnBorrow(true);
jedisPool = new JedisPool(poolConfig,"127.0.0.1");
}
}
}
return jedisPool;
}
public static void release(JedisPool jedisPool,Jedis jedis) {
if(null != jedis)
{
jedisPool.returnResourceObject(jedis);
}
}
}
複製代碼
Spring-Data-Redis項目(簡稱SDR)對Redis的Key-Value數據存儲操做提供了更高層次的抽象,相似於Spring Framework對JDBC支持同樣。Spring-Data-Redis項目(簡稱SDR)對Redis的Key-Value數據存儲操做提供了更高層次的抽象,相似於Spring Framework對JDBC支持同樣。
Spring Data Redis使得在Spring應用中讀寫Redis數據庫更加容易
鏈接Redis服務
在Spring Data Redis中經過org.springframework.data.redis.connection包中的RedisConnection和RedisConnectionFactory類來獲取Redis鏈接。
鏈接redis服務集羣
熟悉Spring的JdbcTemplate對象的話,應該大概能猜出來RedisTemplate的做用了,RedisTemplate對象對RedisConnection進行了封裝,它提供了鏈接管理,序列化等功能,它對Redis的交互進行了更高層次的抽象。另外還提供了Redis操做命令的操做視圖,這極大的方便和簡化了Redis的操做。
Key類型操做 | |
---|---|
ValueOperations | Redis String/Value 操做 |
ListOperations | Redis List 操做 |
SetOperations | Redis Set 操做 |
ZSetOperations | Redis Sort Set 操做 |
HashOperations | Redis Hash 操做 |
Value約束操做 | |
BoundValueOperations | Redis String/Value key 約束 |
BoundListOperations | Redis List key 約束 |
BoundSetOperations | Redis Set key 約束 |
BoundZSetOperations | Redis Sort Set key 約束 |
BoundHashOperations | Redis Hash key 約束 |
簡單的String操做
簡單的List操做
簡單的Set操做
簡單的Zset操做
簡單的Hash操做
其餘操做
使用RedisSerializer
說明 :
這裏配置了RedisTemplate和StringRedisTemplate,不一樣之處在於StringRedisTemplate的Key-Value序列化使用的是StringRedisSerializer。使用StringRedisTemplate操做Redis以後的結果是讀友好的。 另外對Hash類型而言,還有對應的HashKey序列化(其對應於Hash類型的字段名)。
我不能保證每個地方都是對的,可是能夠保證每一句話,每一行代碼都是通過推敲和斟酌的。但願每一篇文章背後都是本身追求純粹技術人生的態度。
永遠相信美好的事情即將發生。