超詳細的redis學習(1)-入門篇
什麼是Redis
基本概念
redis是一個開源的、使用C語言編寫的、支援網路互動的、可基於記憶體也可持久化的Key-Value資料庫(非關係性資料庫)。
redis的優勢
速度快,因為資料存在記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1)
支援豐富資料型別,支援string,list,set,sorted set,hash
支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行
豐富的特性:可用於快取,訊息,按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的安裝
redis安裝比較簡單請自行百度
修改redis密碼配置
開啟 redis.windows.conf 配置檔案//window系統是帶windows的linux系統是redis.conf 找到requirepass foobared,把前面的#號去掉,把foobared改成密碼 例如requirepass 123456
注意修改密碼後需要重新啟動redis伺服器
- 如何修改redis服務後臺啟動
redis的基本命令
檢測啟動redis客戶端命令:
redis-clis
啟動redis命令:
./redis-server直接啟動redis,有的時候需要啟動固定配置檔案(重新設定過密碼)的redis,例如redis-server redis/redis.windows.conf或者./redis-server ../redis.conf
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)