1. 程式人生 > 其它 >Redis,定義、各資料型別增刪改查

Redis,定義、各資料型別增刪改查

1. 定義

Redis 是一個高效能的key-value資料庫,key是字串型別。

 

2.核心特點:

(1)   單程序:

Redis的伺服器程式採用的是單程序模型來處理客戶端的請求。對讀寫時間的響 應是通過對epoll函式的包裝來做到的。

 

3.資料型別:

鍵的型別是字串

 

值的型別分為五種:  字串string,雜湊hash,列表list,無序集合set;有序集合zset

 

1.  string型別

(1)簡介

字串(string)是Redis最基本的型別,可以儲存String,Integer,Float型的資料,甚至是二進位制資料,一個字串最大容量是512M

 

(2)set命令

set 鍵值

》如果鍵不存在,就是新增

》如果鍵存在,就是修改

(1)設值取值

set name zs

set name lisi

(2)設定過期時間

setex   name2  3  wangwu

(2)   設定多個鍵值對

mset key1 value1 key2 value2 key3 value3

(3)   追加值

append key value

 

 

(3)  get命令

(1)   獲取單個值

get key1

(2)   獲取多個值

mget key1 key2

 

(3)  del命令

(1)   刪除某個鍵

del key1

(2)   刪除多個鍵

del key1 key2

 

(4)keys命令(查詢鍵)

mset u1 aa u2 bb u3 cc

keys *

 

(5)exists命令(判斷鍵是否存在)

如果存在返回1,不存在返回0

exists key

 

(6)type命令(檢視鍵對應值的型別)

type key

 

(7)expire命令(設定鍵過期時間)

expire key seconds

 

案例:

set name zz

expire name 5

get name------------>(等一會兒..)

get name

 

(8)TTL 命令(檢視鍵有效時間)

TTL key

以秒為單位,返回給定 key 的剩餘生存時間(TTL, time to live)。

 

返回值:

當 key 不存在時,返回 -2 。

當 key 存在但沒有設定剩餘生存時間時,返回 -1 。

否則,以秒為單位,返回 key 的剩餘生存時間。

 

2.list型別

(1)簡介

(1)列表中的值(value)型別為字串;

(2)字串List,底層實現上不是陣列,而是連結串列,也就是說在頭部和尾部插入一個新元素,其時間複雜度是常數級別的;其弊端是:元素定位比陣列慢

 

(2)新增

從左側插入值:

lpush key value1 value2

從右側插入值:

rpush key value1 value2

 

 

(3)  獲取

返回列表裡指定範圍內的值

(1)   索引從左側開始,第一個值的索引為0;

(2)   索引可以是負數,表示從尾部開始計數,如-1表示最後一個值;

(3)   start,stop為要獲取值的索引。

語法:lrange key start stop

 

例如:

(1)獲取列表所有值

lrange  key  0  -1

 

(2)從第三個元素開始獲取到最後的值

lrange  key  2  -1

 

實戰:

lpush name 1 2 3

rpush name 4 5 6

lrange name 0 -1

lrange name 2 -1

 

 

 

(4)修改

設定指定索引位置的值

(1)索引從左側開始,第一個值的索引為0;

(2)索引可以是負數,表示從尾部開始,-1代表最後一個值。

語法:lset key index value

 

實戰:

lset name 1 aa

lrange name 0 -1

 

(5)刪除

刪除指定值

(1)   將列表中前count次出現的值移除

(2)   count>0:從頭往尾刪除

(3)   count<0:從尾往頭刪除

(4)   count=0:刪除所有值

語法:lrem key count value

(1)實戰:

rpush born2 0 1 2 3 4 5 0 1 2 1 0 1 0 2 3 4 1 0 1 1 2

(2)查詢列表

lrange born2 0 -1

(3)案例2:從鍵列表右側開始刪除1個2

lrem born2 -1 2

(4)查詢列表

lrange born2 0 -1

(5):從鍵列表左側開始刪除2個2

lrem born2 2 2

(6)查詢列表

lrange born2 0 -1

 

3.set型別

(1)簡介

字串Set,無序不可重複,是通過HashTable實現的。

 

(2)實戰

1.sadd:新增元素,格式是SADD KEY_NAME VALUE1..VALUEN

127.0.0.1:0>sadd myset v1
127.0.0.1:0>sadd myset v1       #不得重複
127.0.0.1:0>sadd myset v2 v3 v4  #可以設定多個值

2.smembers:獲取集合中所有元素,格式是SMEMBERS key

127.0.0.1:0>smembers myset     #查詢myset中的值有哪些

3.sismember:判斷元素是否在集合中,格式是SISMEMBER KEY VALUE

127.0.0.1:0>sismember myset v1
127.0.0.1:0>sismember myset v11

4.srem:刪除元素,格式是SREM KEY MEMBER1..MEMBERN

127.0.0.1:0>srem myset v1

127.0.0.1:0>srem myset v1

127.0.0.1:0>smembers myset

5.scard:獲取集合中元素個數,格式是SCARD KEY_NAME

127.0.0.1:0>scard myset

6.spop:彈出元素,格式是SPOP key [count]

127.0.0.1:0>spop myset
127.0.0.1:0>spop myset
127.0.0.1:0>spop myset
127.0.0.1:0>spop myset

127.0.0.1:0>smembers myset

7.smove:移動元素,格式是SMOVE SOURCE DESTINATION MEMBER

sadd myset v1 v2 v3

smembers myset

smove myset myset2 v3

smembers myset

smembers myset2

 

 

 

 

4.  Hash雜湊型別

(1)簡介

按Hash方式來存放字串

 

(2)實戰

  1. 設定值,格式是HSET  KEY_NAME  FIELD  VALUE

案例:

127.0.0.1:0>hset myhash id 123

"1"
127.0.0.1:0>hset myhash name 321

"1"

  1. hmset:同時設定多對值,格式是HMSET  KEY_NAME  FIELD1 VALUE1 ...FIELDN VALUEN

案例:

hmset myhash name 322 age 8

  1. hgetall:獲取該key下所有的值,格式是HGETALL KEY_NAME

案例:

127.0.0.1:0>hgetall myhash

1) "id"

 2)  "123"
 3)  "name"
 4)  "321"
 5)  "age"
 6)  "8"

4.hget:獲取單個key的值,格式是HGET KEY_NAME FIELD_NAME

127.0.0.1:0>hget myhash name

"321"

5.hmget:同時獲取多個值,格式是HMGET KEY_NAME FIELD1...FIELDN

案例:

127.0.0.1:0>hmget myhash id name age

 1)  "123"

 2)  "321"

 3)  "8"

6.hdel:刪除某個項,格式是HDEL KEY_NAME FIELD1.. FIELDN

127.0.0.1:0>hdel myhash id

"1"
127.0.0.1:0>hgetall myhash

 1)  "name"

 2)  "321"

 3)  "age"

 4)  "8"

 

 

5.zset型別(有序集合)

(1)簡介

字串Set,有序且不可重複,根據Score來排序。

 

(2)實戰

1.

zadd:新增元素,格式是ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN,score和項可以是多對,score可以是整數,也可以是浮點數,還可以是+inf表示正無窮大,-inf表示負無窮大

案例:

zadd myzset 10 v1

zadd myzset 10 v1 20 v2 30 v3

zadd myzset 9 v1 20 v2 30 v3

2.

zrange:獲取索引區間內的元素,格式是ZRANGE key start stop [WITHSCORES]

案例:

zrange myzset 0 -1

zrange myzset 0 -1 withscores

3.

zrangebyscore:獲取分數區間內的元素,格式是ZRANGEBYSCORE key min max [WITHSCORES] 案例:

zrangebyscore myzset 0  20           #代表大於等於0,小於等於20

zrangebyscore myzset 0  (20          #代表大於等於0,小於20

zrangebyscore myzset 0  (20 withscores  #代表大於等於0,小於20,帶分數

zrangebyscore myzset 20 +inf withscores  #代表大於等於20,帶分數

zrangebyscore myzset (20 +inf withscores  #代表大於20,帶分數

4.

zrem:刪除元素,格式是ZREM key member [member ...]

案例:

zrem myzset v1 v2                        #刪除v1,v2

zrangebyscore myzset 0 +inf withscores    #獲取所有的大於0的值和分數

5.

zcard:獲取集合中元素個數,格式是ZCARD KEY_NAME

案例:

zcard myzset