1. 程式人生 > 其它 >學以致用 | Redis概念與簡單實操

學以致用 | Redis概念與簡單實操

Redis概念

Redis是一個由C語言編寫、基於key-value儲存結構的開源NoSQL資料庫,其讀寫速度為10萬次/秒,這個速度已經遠遠大於傳統的關係型資料庫。

使用場景

  1. 在高併發的情況下,可將Redis作為應用程式與關係資料庫之間的快取。

  • 讀操作:直接從Redis中高速讀取資料;

  • 寫操作:寫操作有兩種方式;

    A. 先將資料寫入MySQL 資料庫,用於持久化,然後再將寫入的資料同步至Redis中,方便後面訪問量上來後高速讀取;

    B. 在高併發訪問的情況下,可以先將讀寫操作都在Redis中執行,然後再將Redis中的資料寫入訊息佇列MQ中,然後從MQ中將資料寫入MySQL中。

  1. Redis自身就是一個高效能的NoSQL資料庫,因此Redis可以單獨作為資料庫。

Redis環境搭建

  1. 訪問Redis官網,根據自己需求選擇版本號進行下載。

    注意:

    這裡您可以根據您的作業系統選擇對應的版本,我這裡選擇win版本;

    Linux版本,解壓命令tar -zxvf redis-4.0.11.tar.gz,如有其它問題可以私信交流!

  2. 下載完成後解壓;

  3. 進入redis安裝目錄,找到redis-server.exe,以管理員許可權執行,服務端執行如下圖所示;

  4. 以管理員許可權執行redis-cli.exe,客戶端執行如下圖所示;

Redis六大常見型別的核心操作

在開始講解常見操作時,我們先來看看在操作Redis時我們需要注意的點

1.Redis對關鍵字或者變數不區分大小寫,但對資料區分大小寫。

2.在Redis中,K和KB含義不同,1K=1000 bytes,1KB =1024 bytes;同理,M和MB,G和GB也是一樣的。

String操作

  • 給hello 賦值:set hello world

  • 獲取hello的值 :get hello

  • 獲取hello的長度 :strlen hello

  • 擷取hello的值(從0位到2位):getrange hello 0 2

  • 批量給k1、k2、k3賦值:mset k1 v1 k2 v2 k3 v3

  • 批量獲取k1,k2,k3的值:mget k1 k2 k3

  • 給k4賦值,並且指定該變數的宣告週期為10秒:setex k4 10 v4

  • 檢視k4剩餘的過期時間:ttl k4


    v4這個值已經過期了2秒了。

  • 如果不存在k5,給k5賦值;如果已存在,則賦值失敗:setnx k5 v5

  • 賦值一個內容為數字形式的字串:set num 100

  • num 自增1:incr num

  • num 自減1:decr num

  • 綜合來看,SET key value

  • EX 指生命週期為:秒

  • PX 指生命週期為:毫秒

  • NX 指當key不存在時,才能執行

  • XX指當key存在時,才能執行

List操作

  • 給mylist中增加多個元素:lpush mylist a1 a2 a3 a4 a5rpush mylist a1 a2 a3 a4 a5

  • 檢視mylist中的前3個元素:lrange mylist 0 3

  • 檢視mylist中所有的元素:lrange mylist 0 -1

  • 只保留mylist中第0個到第2個元素:ltrim mylist 0 2

  • 將mylist的最後一個元素,移動到mylist2的第一個元素:rpoplpush mylist mylist2

  • 將mylist的第二個元素值設定為x:lset mylist 2 x

  • 在mylist的a3元素前後,插入linsert mylist bdfore/after a3 y

Set操作

list中的元素可以重複,而set 中的元素不能重複(重複的元素會被忽略)

  • 給myset中增加多個元素:sadd set a1 a2 a3

  • 檢視myset中的全部元素:smembers set

  • 判斷myset中是否包含a2 元素:sismember set a2

  • 刪除myset中的阿a2元素:srem set a2

  • 隨機獲取(不會刪除)myset中的兩個元素:srandmember set 2

  • 隨機獲取(並刪除)myset中的一個元素:spop myset

  • 將myset中的a2移動到myset2中的一個元素:smove set a2 myset2

SortedSet操作

Set不允許重複值,但是它是無序的,也不能根據下標獲取元素。但是SortedSet能解決這個問題,SortedSet可以根據score值的大小,將集合中的元素排序,進而實現有序。

  • 給student中增加多個元素(zs,ls,ww),並設定score值:zadd students 8 zs 9 ls 10 ww

  • 根據score值排序,查詢0-2個元素:zrange students 0 2

  • 根據score值排序,查詢第0-2個元素,並顯示每個元素的score:zrange students 0 2 withscores

  • 根據score值從小到大的順序,查詢students中第0個至第2個元素(逆序):zrevrange students 0 2

  • 查詢student中,score值>=8,且<10的元素:zrangebyscore students 8 10

  • 刪除students中zs和ww:zrem names zs ww

    image-20211030115341851
  • 統計students中,score值介於8和10之間的元素個數:zcount students 8 10

  • 查詢students中ww元素的的下標:zrank students ww

  • 獲取students中,ww的score的值:zscore students ww

  • 獲取students中,ww的score值逆序:zrevrank students ww

Hash 操作

  • 在Java中我們需要給一個student物件賦值,需要使用student.setName(“zs”);在Redis裡面就比較簡單且明瞭,可以使用:hset student name zs

  • 同時給多個屬性賦值:hmset person name zs age 23 sex male

  • 同時獲取person多個屬性:hmget person name age sex

  • 獲取student的name屬性值:hget student name

  • 獲取student全部屬性名:hkeys student

  • 獲取student的全部屬性值:hvals student

  • 獲取student的全部屬性值和屬性名:hgetall student

  • 刪除student的name和age:hdel student age 3

Key 及其它操作

  • 給已存在的key 設定生命週期:expire k1 10(秒) 、pexpire k1 10(毫秒)

  • 檢視當前資料庫中的全部key:key *

  • 根據佔位符?對key進行模糊查詢:keys k?

  • 判斷是否存在某一個key:exists k1

  • 檢視某個key-value的資料型別:type k1

  • 檢視當前資料庫有多少條資料:dbsize

  • 將當前資料庫中的某條資料,移動到其它資料庫:move key 資料庫編號

  • 清空當前資料庫中的全部資料:flushdb

  • 清空全部資料庫中的資料(謹慎使用哈):flushall

在學習概念和基礎的時候,往往是最枯燥乏味的時候,但是越枯燥乏味的知識,在實際開發工作中用的時候越是重要​。

在下一篇文章中,我們會一起學習如何配置Redis並且如何在Java工程中如何引入並使用Redis。