天天看點

[Redis入門到精通day02]redis入門、安裝及常用類型與常用操作指令Redis入門到精通day02

Redis入門到精通day02

一、Redis簡介

Redis(remote dictionary server) 遠端字典伺服器

1.特點

redis和其他KV緩存産品有以下三個特點:

1.持久化,重新開機後可以再次家在使用

2.資料類型豐富,同時提供list,set,zset,hash等資料結構存儲

3.支援資料備份,即master-slave(主從模式)資料備份

2.作用

1.記憶體存儲和持久化,支援異步寫入同時不影響服務

2.支援取n個資料的操作

3.模拟類似于HTTPSession這種類型的設定過期時間的功能

4.釋出,訂閱消息系統

5.定時器,計數器

二、linux安裝redis

這裡使用docker安裝redis

具體步驟見部落格

挂載+進入容器運作

預設裝載16個資料庫

三、操作redis

1.進入redis

docker exec -it redis redis-cli
           

2.更換資料庫編号

編号是0~資料庫個數-1

127.0.0.1:6379> select 7 #選擇6号資料庫
OK
127.0.0.1:6379[7]> 

           

3.入門指令

127.0.0.1:6379> DBSIZE	#查詢目前庫的所有kv數量
(integer) 4
127.0.0.1:6379> keys *	#查詢目前庫所有鍵
1) "backup3"
2) "backup2"
3) "backup4"
4) "backup1"

127.0.0.1:6379> set k1 v1	#存儲k1-v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> keys k?	#模糊查詢k?
1) "k1"
2) "k2"
127.0.0.1:6379> FLUSHDB	#删除目前庫資料
127.0.0.1:6379> FLUSHALL	#删除所有庫資料
           

四、常用五大資料類型

String,Hash,List,Set,Zset

1.String

是最基本的類型,一個K對應一個V

String類型是二進制安全的,可以包含任意資料比如jpg或者序列化對象,V最多可以是512M

2.Hash

hash是一個鍵值對集合,特别适合存儲對象,類型與Map<String,Object>

3.List

清單是簡單的字元串清單,可以在頭部或者尾部添加,底層實作是連結清單

4.Set

是String的無序集合,底層使用HashTable實作

5.Zset

Zset是有序集合,也是String類型的集合,不允許存在重複的成員,每個元素都會關聯一個double類型的分數,通過這個分數進行從小到大排序。

Zset的成員是唯一的,分數是可以重複的

五、常用指令

1.redis鍵(key)

keys * 查詢所有key

exists key的名字 判斷某個key是否存在

move key db 從目前庫移動到db庫

expire key 秒鐘 為給定的key設定過期時間

ttl key 檢視還有多少秒過期,-1表示永不過期,-2表示已過期

type key 檢視你的key是什麼類型

127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
127.0.0.1:6379> EXISTS k1		#是否存在k1,存在1,不存在0
(integer) 1
127.0.0.1:6379> EXISTS k5
(integer) 0
127.0.0.1:6379> MOVE k1 1		#将k1移動到第二個庫
(integer) 1
127.0.0.1:6379> keys *
1) "k2"
2) "k3"
127.0.0.1:6379> EXPIRE k2 10	#設定k2過期時間為10秒
(integer) 1
127.0.0.1:6379> TTL k2	#查詢過期時間,如果已經過期就是-2,-1表示永不過期
(integer) 7
127.0.0.1:6379> keys *
1) "k3"
127.0.0.1:6379> TYPE k3		#查詢k3類型為String
string

           

2.redis字元串(String)

set/get/del/append/strlen 設定/擷取/删除/追加/字元串長度

Incr/decr/incrby/decrby 在value是數字的前提下操作,加1/減1/加上一個值/減去一個值

getrange/setrange 擷取範圍/設定範圍

setex(set with expire)鍵秒值/setnx(set if not exist) 設定過期時間/如果不存在則設定

mset/mget/msetnx 同時設定多個kv/擷取多個kv/同時設定多個kv,并要求所有要設定的kv都不存在

getset(先get再set) 擷取舊值設定新值

127.0.0.1:6379> set k1 v1		#設定k1
OK
127.0.0.1:6379> get k1		#擷取k1的值
"v1"
127.0.0.1:6379> del k1		#删除k1的值
(integer) 1
127.0.0.1:6379> get k1	
(nil)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> APPEND k1 123		#v1後面追加123
(integer) 5
127.0.0.1:6379> STRLEN k1				#查詢k1的長度
(integer) 5
127.0.0.1:6379> GET k1
"v1123"
           
127.0.0.1:6379> set k1 1		#v必須是數字
OK
127.0.0.1:6379> INCR k1			#自增1
(integer) 2
127.0.0.1:6379> INCR k1
(integer) 3
127.0.0.1:6379> INCR k1
(integer) 4
127.0.0.1:6379> INCR k1
(integer) 5
127.0.0.1:6379> DECR k1			#自減1
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> DECR k1
(integer) 3
127.0.0.1:6379> DECR k1
(integer) 2
127.0.0.1:6379> DECR k1
(integer) 1
127.0.0.1:6379> INCRBY k1 2	#增加2
(integer) 3
127.0.0.1:6379> INCRBY k1 2
(integer) 5
127.0.0.1:6379> INCRBY k1 2
(integer) 7
127.0.0.1:6379> DECRBY k1 2	#減去2
(integer) 5
127.0.0.1:6379> DECRBY k1 2
(integer) 3
127.0.0.1:6379> DECRBY k1 2
(integer) 1

           
127.0.0.1:6379> set k2 v1234
OK
127.0.0.1:6379> GETRANGE k2 0 -1		#GETRANGE 鍵 0 -1 查詢整個v1
"v1234"
127.0.0.1:6379> GETRANGE k2 0 1			#GETRANGE 鍵 n m 查詢v1的n-m索引值
"v1"
127.0.0.1:6379> SETRANGE k2 0 xxx		#SETRANGE 鍵 n xxx 修改從n索引後面為xxx
(integer) 5
127.0.0.1:6379> get k2
"xxx34"
           
127.0.0.1:6379> SETEX k2 5 10		#設定一個值為10的k2,過期時間為5秒
OK
127.0.0.1:6379> SETNX k1 5			#如果存在k1則設定成功否則設定失敗
(integer) 0
127.0.0.1:6379> SETNX k2 5
(integer) 1
127.0.0.1:6379> get k2
"5"

           
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3		#儲存k1=v1 k2=v2 k3=v3
OK
127.0.0.1:6379> MGET k1 k2 k3							#擷取k1,k2,k3的值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 111 k4 112			#具有原子性,如果有一個不能加,其他都不行
(integer) 0
127.0.0.1:6379> MSETNX k5 111 k4 112
(integer) 1
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> getset k1 new							#擷取舊值并将新值傳入
"v1"
127.0.0.1:6379> get k1
"new"
           

3.redis清單(list)

lpush/rpush/lrange 從左邊壓入資料/從右邊壓入資料/從左邊範圍

lpop/rpop 從左邊出棧/從右邊出棧

lindex 按照索引下标獲得元素(從上到下)

llen 隊列長度

lrem key 删N個value

ltrim key 開始index 結束index,截取指定範圍的值後再指派給key

rpoplpush 右邊出棧加載左邊

lset key index value

linsert key before/after 值1 值2 在key值前/後插入值

127.0.0.1:6379> LPUSH list1 1 2 3 4 5		#從左邊壓入資料
(integer) 5
127.0.0.1:6379> LRANGE list1 0 -1				#擷取list1全部資料
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"	
127.0.0.1:6379> RPUSH list2 1 2 3 4 5 	#從右邊壓入資料
(integer) 5
127.0.0.1:6379> LRANGE list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> lpop list1							#左邊出棧
"5"
127.0.0.1:6379> rpop list1							#右邊出棧
"1"
127.0.0.1:6379> lpop list2
"1"
127.0.0.1:6379> rpop list2
"5"
127.0.0.1:6379> LINDEX list1 0					#LINDEX list1 n  擷取索引n處的值
"4"
127.0.0.1:6379> LINDEX list2 0
"2"
127.0.0.1:6379> LLEN list1							#擷取清單元素數量
(integer) 3
127.0.0.1:6379> RPUSH list1 1 2 3 4 5 5 5 6 7
(integer) 9
127.0.0.1:6379> LREM list1 2 5					#删除List1中從左往右的2個5
(integer) 2
127.0.0.1:6379> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> RPOPLPUSH list1 list2		#将List1的右邊第一個元素出棧壓入到List2的左邊
"7"
127.0.0.1:6379> LRANGE list2 0 -1
1) "7"
2) "2"
3) "3"
4) "4"


           

4.redis集合(Set)

sadd/smembers/sismember 添加集合/列出集合資料/看是不是集合的資料

scard 擷取集合裡面的元素個數

srem key value 删除集合中元素

srandmember key 某個整數(随機出幾個數)

spop key 随機出棧

smove key1 key2 在key1裡某個值 作用是将key1裡的某個值賦給key2

差集:sdiff

交集:sinter

并集:sunion

127.0.0.1:6379> SADD set1 1 2 3 4 5		#建立set1将12345添加進去
(integer) 5	
127.0.0.1:6379> SMEMBERS set1					#set1的所有資料
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SISMEMBER set1 3
(integer) 1
127.0.0.1:6379> SCARD set1						#顯示set1個數
(integer) 5
127.0.0.1:6379> SREM set1 3
(integer) 1
127.0.0.1:6379> SRANDMEMBER set1			#随機出一個數,不删除
"5"
127.0.0.1:6379> SMEMBERS set1					
1) "1"
2) "2"
3) "4"
4) "5"
127.0.0.1:6379> spop set1							#随機出棧一個數
"1"
127.0.0.1:6379> SMEMBERS set1
1) "2"
2) "4"
3) "5"
127.0.0.1:6379> SADD set2 2 3
(integer) 2
127.0.0.1:6379> SMOVE set1 set2 5			#将set1的5移到set2
(integer) 1
127.0.0.1:6379> sadd  set1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SADD set2 1 2 3 7 8
(integer) 5
127.0.0.1:6379> SDIFF set1 set2				#取set1為主,找出兩個集合的差集
1) "4"
2) "5"
127.0.0.1:6379> SINTER set1 set2			#找出兩個集合的交集
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SUNION set1 set2			#找出兩個集合的并集
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "7"
7) "8"
           

5.redis哈希(hash)

以kv形式存儲,但是v存儲的是kv形式

hset/hget/hmset/hmget/hgetall/hdel

hlen

hexists key 在key裡面的某個值的key

hkeys/hvals

hincrby/hincrbyfloat

hsetnx

127.0.0.1:6379> hset hash1 age 10		#添加age=10的hash表
(integer) 1
127.0.0.1:6379> HGET hash1 age			#查找hash1中的age值
"10"
127.0.0.1:6379> HMSET hash2 name zhangsan age 18		#多kv添加
OK
127.0.0.1:6379> hmget hash2 name age		#擷取多屬性name,age的值
1) "zhangsan"
2) "18"
127.0.0.1:6379> HGETALL hash2		#擷取hash2的所有kv對
1) "name"
2) "zhangsan"
3) "age"
4) "18"
127.0.0.1:6379> HDEL hash2 name		#删除hash2的name鍵值對
(integer) 1
127.0.0.1:6379> HGETALL hash2
1) "age"
2) "18"
127.0.0.1:6379> HLEN hash2		#hash2的長度
(integer) 1
127.0.0.1:6379> HEXISTS hash2 age		#hash2是否存在age屬性
(integer) 1
127.0.0.1:6379> HSET hash3 name lisi age 20 sex nan
(integer) 3
127.0.0.1:6379> hgetall hash3
1) "name"
2) "lisi"
3) "age"
4) "20"
5) "sex"
6) "nan"
127.0.0.1:6379> hkeys hash3		#擷取hash3的所有keys
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS hash3		#擷取hash3的所有values
1) "lisi"
2) "20"
3) "nan"
127.0.0.1:6379> HINCRBY hash3 age 2		#hash3的age加2
(integer) 22
127.0.0.1:6379> HINCRBYFLOAT hash3 age 0.5		#hash3的age加0.5
"22.5"
127.0.0.1:6379> hsetnx hash3 age 50		#如果存在則不加,如果不存在則添加
(integer) 0
127.0.0.1:6379> hsetnx hash3 money 50
(integer) 1

           

6.redis有序集合(Zset)

集合方式是 key score value

zadd/zrange 添加/範圍

zrangebyscore key 開始score 結束score

zrem key 某score下對應的value值,作用是删除元素

zcard/zcount key score區間/zrank key values值,作用是獲得下标值/zscore key 對應值,獲得分數

zrevrank key values值,作用是逆序獲得下标值

zrevrange

zrevrangebyscore key 結束score 開始score

127.0.0.1:6379> ZADD zset1 10 v1 20 v2 40 v3 30 v4		#按照key score value添加
(integer) 4
127.0.0.1:6379> ZRANGE zset1 0 -1		#查詢所有zset1
1) "v1"
2) "v2"
3) "v4"
4) "v3"
127.0.0.1:6379> ZRANGE zset1 0 1		#查詢0-1位置的zset1
1) "v1"
2) "v2"
127.0.0.1:6379> ZRANGEBYSCORE zset1 10 30		#按10-30分數排列zset,加上(表示不含
1) "v1"
2) "v2"
3) "v4"
127.0.0.1:6379> ZREM zset1 v3		#删除v3
(integer) 1
127.0.0.1:6379> ZCARD zset1			#zset1的元素個數
(integer) 3	
127.0.0.1:6379> ZCOUNT zset1 10 20		#擷取分數為10-20的zset1集合中個數
(integer) 2
127.0.0.1:6379> ZRANK zset1 v4				#擷取value為v4的值的下标
(integer) 2
127.0.0.1:6379> ZSCORE zset1 v4				#擷取v4的分數
"30"
127.0.0.1:6379> ZREVRANK zset1 v4			#擷取v4的逆序下标
(integer) 0
127.0.0.1:6379> ZREVRANGE zset1 0 -1	#擷取zset1所有逆序元素
1) "v4"
2) "v2"
3) "v1"
127.0.0.1:6379> ZREVRANGEBYSCORE zset1 40 10		#分數從大到小擷取40-10的逆序元素
1) "v4"
2) "v2"
3) "v1"