1. 程式人生 > >Java操作redis程式碼總結

Java操作redis程式碼總結

jedis概念

講到jedis,先來看看redis, redis是當今基本所有網際網路產品都在使用的一種提供鍵值對形式的記憶體資料庫。之所以說是記憶體資料庫,是因為redis基於記憶體的讀取和寫入相比傳統的資料庫基於磁碟IO快上數倍。於是乎redis在現在的應用中使用的非常廣泛。主要的作用在於:

1、提供快取服務,儲存訪問頻率高的熱資料防止穿透到資料庫
2、在分散式系統中可以作為實現分散式鎖的一種實現方案

那jedis就是集成了redis的一些命令操作,封裝了redis的java客戶端。提供了連線池管理。一般不直接使用jedis,而是在其上在封裝一層,作為業務的使用。如果用spring的話,可以看看spring 封裝的

redis Spring Data Redis

Spring-Data-Redis介紹

Spring-Data-Redis專案(簡稱SDR)對Redis的Key-Value資料儲存操作提供了更高層次的抽象,類似於Spring Framework對JDBC支援一樣。

Spring Data Redis 操作redis

RedisTemplate中定義了對5種資料結構操作

redisTemplate.opsForValue();//操作字串 
redisTemplate.opsForHash();//操作hash 
redisTemplate.opsForList();//操作list 
redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set

redis list操作

  • 原始碼

從redis list的末端開始遍歷元素,取元素消費,然後刪除,已測試,不會有問題
反方向遍歷的話,redisTemplate.opsForList().index()函式得到的結果會有問題【index會變化】

  • redis list 視覺化資料結構
    這裡寫圖片描述
import org.springframework.data.redis.core.StringRedisTemplate;


@Autowired
private StringRedisTemplate redisTemplate;
@Scheduled(cron = "0 0/1 * * * ?") public void latticePointPush() { System.out.println("start ------------------------------"); // rightPush: Insert all the specified values at the tail of the list // stored at key. // 從list的尾部新增元素 redisTemplate.opsForList().rightPush(KEY_OF_PUSH_FAIL_TIME, DateFormat.format(new Date())); redisTemplate.opsForList().rightPush(KEY_OF_PUSH_FAIL_TIME, DateFormat.format(new Date(new Date().getTime() + 1000 * 60))); redisTemplate.opsForList().rightPush(KEY_OF_PUSH_FAIL_TIME, DateFormat.format(new Date(new Date().getTime() + 1000 * 120))); redisTemplate.opsForList().rightPush(KEY_OF_PUSH_FAIL_TIME, DateFormat.format(new Date(new Date().getTime() + 1000 * 180))); Long size = Long.valueOf(redisTemplate.opsForList().size(KEY_OF_PUSH_FAIL_TIME)); System.out.println("redis list size " + size); // 必要時需要對size進行條件判斷 // 從list的尾部開始遍歷 for (long i = size - 1; i >= 0; i--) { // Returns the element at index index in the list stored at key. // The index is zero-based, so 0 means the first element, 1 the // second element and so on. String value = redisTemplate.opsForList().index(KEY_OF_PUSH_FAIL_TIME, i); System.out.println( String.format("Returns the element at index index【%s】 in the list stored at key【%s】 is 【%s】", i, KEY_OF_PUSH_FAIL_TIME, value)); // rightPop: Removes and returns the last element of the list stored // at key. System.out.println("刪除前,redis list size " + redisTemplate.opsForList().size(KEY_OF_PUSH_FAIL_TIME)); // 刪除並返回list的最後一個元素 String delValue = redisTemplate.opsForList().rightPop(KEY_OF_PUSH_FAIL_TIME); System.out.println("已刪除: " + delValue); System.out.println("刪除後,redis list size " + redisTemplate.opsForList().size(KEY_OF_PUSH_FAIL_TIME)); } System.out.println("finish ----------------------------"); }
  • 執行結果
start ------------------------------
redis list size 4
Returns the element at index index【3in the list stored at key【WA_LNMP_PUSH_TIME】  is2018-06-16 14:43:00】
刪除前,redis list size 4
已刪除: 2018-06-16 14:43:00
刪除後,redis list size 3
Returns the element at index index【2in the list stored at key【WA_LNMP_PUSH_TIME】  is2018-06-16 14:42:00】
刪除前,redis list size 3
已刪除: 2018-06-16 14:42:00
刪除後,redis list size 2
Returns the element at index index【1in the list stored at key【WA_LNMP_PUSH_TIME】  is2018-06-16 14:41:00】
刪除前,redis list size 2
已刪除: 2018-06-16 14:41:00
刪除後,redis list size 1
Returns the element at index index【0in the list stored at key【WA_LNMP_PUSH_TIME】  is2018-06-16 14:40:00】
刪除前,redis list size 1
已刪除: 2018-06-16 14:40:00
刪除後,redis list size 0
finish ----------------------------