1. 程式人生 > >超詳細的redis學習(1)-入門篇

超詳細的redis學習(1)-入門篇

什麼是Redis

  • 基本概念

    redis是一個開源的、使用C語言編寫的、支援網路互動的、可基於記憶體也可持久化的Key-Value資料庫(非關係性資料庫)。

  • redis的優勢

    1. 速度快,因為資料存在記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1)

    2. 支援豐富資料型別,支援string,list,set,sorted set,hash

    3. 支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行

    4. 豐富的特性:可用於快取,訊息,按key設定過期時間,過期後將會自動刪除

redis的應用場景

  • 快取

    (1) 對於一些要返回給前端資料的快取,當有大量資料庫sql操作時候,為了避免每次介面請求都要去查詢資料庫,可以把一些資料快取到redis中,這樣是直接從記憶體中獲取資料,速度回增快很多。

    (2) web端使用者,用於登陸快取session資料,登陸的一些資訊存到session中,快取到redis中

  • 佇列

    redis中提供了list介面,這個list提供了lpush和rpop,這兩個方法具有原子性,可以插入佇列元素和彈出佇列元素。

  • 資料儲存

    redis是非關係型資料庫,可以把redis直接用於資料儲存,提供了增刪改查等操作,因為redis有良好的硬碟持久化機制,redis資料就可以定期持久化到硬碟中,保證了redis資料的完整性和安全性。

  • redis鎖實現防刷機制

    redis鎖可以處理併發問題,redis資料型別中有一個set型別,set型別在儲存資料的時候是無序的,而且每個值是不一樣的,不能重複,這樣就可以快速的查詢元素中某個值是否存在,精確的進行增加刪除操作。

說明:redis使用場景的基本操作會在redis學習(3)-實戰篇中講解

redis安裝與啟動

  • redis的安裝

    1. redis安裝比較簡單請自行百度

    2. 修改redis密碼配置

    開啟 redis.windows.conf 配置檔案//window系統是帶windows的linux系統是redis.conf 找到requirepass foobared,把前面的#號去掉,把foobared改成密碼 例如requirepass 123456

    注意修改密碼後需要重新啟動redis伺服器

    1. 如何修改redis服務後臺啟動
  • redis的基本命令

    1. 檢測啟動redis客戶端命令:

      redis-clis

    2. 啟動redis命令:

      ./redis-server直接啟動redis,有的時候需要啟動固定配置檔案(重新設定過密碼)的redis,例如redis-server redis/redis.windows.conf或者./redis-server ../redis.conf

    3. redis服務相關命令

      解除安裝服務:redis-server –service-uninstall

      開啟服務:redis-server –service-start

      停止服務:redis-server –service-stop

redis的基本資料型別

redis是一種高階的key-value非關係型資料庫。,其中value支援五種資料型別:string,List,set,hash,sore set - 字串(string) string儲存的元素型別可以是string/int/float,int型別可以進行增加和減少操作。 程式碼實際操作過程:

[[email protected]_160_197_centos /]# redis-cli
127.0.0.1:6379> set string1 koala
OK
127.0.0.1:6379> get string1
"koala"
127.0.0.1:6379> set string2 2
OK
127.0.0.1:6379> get string2
"2"
127.0.0.1:6379> incr string2
(integer) 3
127.0.0.1:6379> get string2
"3"
127.0.0.1:6379> decrby string2 2
(integer) 1
127.0.0.1:6379> get string2
"1"
  • 字串列表(list) list型別是一個有序的列表,有序表示的是從左到右還是從右到左,而且資料內容是可以重複的。 程式碼實際操作過程:
[[email protected]_160_197_centos /]# redis-cli
127.0.0.1:6379> lpush list1 12
(integer) 1
127.0.0.1:6379> lpush list1 13
(integer) 2
127.0.0.1:6379> lpush list1 12
(integer) 3
127.0.0.1:6379> rpop list1
"12"
127.0.0.1:6379> lpush list2 12
(integer) 1
127.0.0.1:6379> lpush list2 13
(integer) 2
127.0.0.1:6379> lpush list2 12
(integer) 3
127.0.0.1:6379> llen list2
(integer) 3
127.0.0.1:6379>
  • 字串集合(set)

    set型別中提供了無序的方式來儲存多個不同的元素,set型別中每個元素的值都不一樣,使用者可以快速對元素中的值新增刪除,檢查某些值是否存在,重複的元素是無法繼續插入集合的。 程式碼實際操作過程:

127.0.0.1:6379> sadd set1 12
(integer) 1
127.0.0.1:6379> sadd set1 12
(integer) 0
127.0.0.1:6379> scard set1
(integer) 1
127.0.0.1:6379> sadd set1 13
(integer) 1
127.0.0.1:6379> scard set1
(integer) 2
127.0.0.1:6379> sadd set1 13
(integer) 0
127.0.0.1:6379> sismember set1 13  //檢視13是否在集合中
(integer) 1
127.0.0.1:6379> srem set1 13    //從集合中刪除13
  • 雜湊(hashes)

    hash型別也叫雜湊型別,儲存的時候存的是鍵值對。查詢條數的時候只要是健不一樣,就是不同的條數,儘管值是相同的。

[[email protected]_160_197_centos /]# redis-cli
127.0.0.1:6379> hset hash1 key1 12
(integer) 1
127.0.0.1:6379> hget hash1 key1
"12"
127.0.0.1:6379> hset hash1 key2 13
(integer) 1
127.0.0.1:6379> hset hash1 key3 13
(integer) 1
127.0.0.1:6379> hlen hash1//查詢條數的時候只要是健不一樣,就是不同的條數,儘管值是相同的。
(integer) 3
127.0.0.1:6379> hset hsah1 key3 14
(integer) 1
127.0.0.1:6379> hset hash1 key3 14
(integer) 0
127.0.0.1:6379> hget hash1 key3
"14"
127.0.0.1:6379> hmget hash1 key1 key2  //同時獲取key1和key2的值
1) "12"
2) "13"
  • 有序字串集合(sorted sets)