redis常見資料型別
阿新 • • 發佈:2018-12-14
1 redis簡介
redis是一個開源的、使用C語言編寫的、支援網路互動的、可基於記憶體也可持久化的Key-Value資料庫。
1.1 redis和memcached對比
對比項 | Memcached | Redis |
---|---|---|
型別 | Key-value資料庫 | Key-value資料庫 |
過期策略 | 支援 | 支援 |
資料型別 | 單一資料型別 | 多種資料型別 |
持久化 | 不支援 | 支援 |
主從複製 | 不支援 | 支援 |
虛擬記憶體 | 不支援 | 支援(不建議使用) |
1.2 安裝redis
配置repo,yum安裝redis
[[email protected] ~]# wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
[ [email protected] ~]# yum install redis -y
[[email protected] ~]# rpm -qa redis # 這個版本的可以有命令用法提示,可TAB補全
redis-3.2.12-1.el6.x86_64
[[email protected] ~]# rpm -ql redis
修改bind為本地ip地址
[[email protected] ~]# vim /etc/redis.conf
bind 10.0.0.10
啟動redis
[[email protected] ~]# /etc/init.d/redis start
啟動 : [確定]
[ [email protected] ~]# lsof -i :6379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 6844 redis 4u IPv4 46720 0t0 TCP 10.0.0.10:6379 (LISTEN)
2 Redis的資料型別
2.1 字串型別(Strings)
命令 | 作用 |
---|---|
SET key value [EX seconds] [PX milliseconds] [NX|XX] |
設定Key |
GET key |
獲取Key的值 |
EXISTS key [key ...] |
判斷Key是否存在 |
KEYS pattern |
顯示所有的Key |
DEL key [key ...] |
刪除指定的Key |
TYPE key |
獲取Key的型別 |
APPEND key value |
追加內容到value |
STRLEN key |
獲取字串Key的長度 |
MGET key [key ...] |
獲取多個Key |
MSET key value [key value ...] |
設定多個Key |
INCR key |
自增 |
INCRBY key increment |
指定步長的自增 |
DECR key |
自減 |
DECABY key decrement |
指定步長的自減 |
INCRBYFLOAT key increment |
自增浮點型別 |
[[email protected] ~]# redis-cli -h 10.0.0.10
10.0.0.10:6379> set key value [EX seconds] [PX milliseconds] [NX|XX]
10.0.0.10:6379> set mykey RSQ
OK
10.0.0.10:6379> get mykey # 獲取key
"RSQ"
10.0.0.10:6379> keys * # 獲取當前所有key,生產慎用,相當於遍歷整個資料庫,若資料過多會影響效能
1) "mykey"
10.0.0.10:6379> EXISTS mykey # 判斷某一key是否存在,存在為1,否則為0
(integer) 1
10.0.0.10:6379> EXISTS mykeykey
(integer) 0
10.0.0.10:6379> DEL mykey # 刪除key
(integer) 1
10.0.0.10:6379> EXISTS mykey
(integer) 0
10.0.0.10:6379> set mykey RSQ
OK
10.0.0.10:6379> TYPE mykey # 檢視key資料型別
String
10.0.0.10:6379> set mykey RSQ
OK
10.0.0.10:6379> APPEND mykey RSQ # 追加key
(integer) 6
10.0.0.10:6379> GET mykey
"RSQRSQ"
10.0.0.10:6379> STRLEN mykey # 檢視key長度
(integer) 6
10.0.0.10:6379> INCR num # 自增,用於計數
(integer) 1
10.0.0.10:6379> GET mykey
"RSQRSQ"
10.0.0.10:6379> get num
"1"
10.0.0.10:6379> INCR num
(integer) 2
10.0.0.10:6379> get num
"2"
10.0.0.10:6379> INCR num
(integer) 3
10.0.0.10:6379> INCR num
(integer) 4
10.0.0.10:6379> INCR num
(integer) 5
10.0.0.10:6379> INCR num
(integer) 6
10.0.0.10:6379> get num
"6"
10.0.0.10:6379> INCRBY num 5 # 指定自增步長
(integer) 11
10.0.0.10:6379> get num
"11"
10.0.0.10:6379> DECR num # 自減
(integer) 10
10.0.0.10:6379> DECR num
(integer) 9
10.0.0.10:6379> DECR num
(integer) 8
10.0.0.10:6379> DECR num
(integer) 7
10.0.0.10:6379> get num
"7"
10.0.0.10:6379> DECRBY num 5 # 指定自減步長,支援負數
(integer) 2
10.0.0.10:6379> DECRBY num 5
(integer) -3
10.0.0.10:6379> DECRBY num 5
(integer) -8
10.0.0.10:6379> MSET key1 R1 key2 R2 key3 R3 # 設定多個key
OK
10.0.0.10:6379> keys *
1) "key1"
2) "key3"
3) "mykey"
4) "num"
5) "key2"
10.0.0.10:6379> MGET key1 key2 key3 # 獲取多個key
1) "R1"
2) "R2"
3) "R3"
2.2 雜湊型別(Hashes)
命令 | 作用 |
---|---|
HSET key field value |
設定hash裡面一個欄位的值 |
HGET key field |
獲取hash中field的值 |
HMSET key field value [field value ...] |
設定多個hash欄位值 |
HMGET key field [field ...] |
獲取多個hash中field的值 |
HGETALL key |
從hash中讀取全部的域和值 |
HDEL key field [field ...] |
刪除一個或多個hash中的field |
10.0.0.10:6379> HSET car name BMW # 設定hash值
(integer) 1
10.0.0.10:6379> HSET car price 500
(integer) 1
10.0.0.10:6379> HGET car # 獲取鍵的field域值,不能直接跟鍵,會報錯
(error) ERR wrong number of arguments for 'hget' command
10.0.0.10:6379> HGET car name
"BMW"
10.0.0.10:6379> HGET car price
"500"
10.0.0.10:6379> HMGET car name price
1) "BMW"
2) "500"
10.0.0.10:6379> HSET car price 10000
(integer) 0
10.0.0.10:6379> HGET car price
"10000"
10.0.0.10:6379> HMSET book name flower price 20 # 可以設定多個鍵的域
OK
10.0.0.10:6379> HMGET book name price #獲取多個鍵的域
1) "flower"
2) "20"
10.0.0.10:6379> HMGET book price name
1) "20"
2) "flower"
10.0.0.10:6379> HGETALL book # 獲取一個鍵的所有fields及values
1) "name"
2) "flower"
3) "price"
4) "20"
10.0.0.10:6379> HDEL car name # 刪除鍵的field
(integer) 1
10.0.0.10:6379> HGETALL car
1) "price"
2) "10000"
10.0.0.10:6379> HEXISTS car price # 檢視此hash 鍵的field是否存在
(integer) 1
10.0.0.10:6379> HEXISTS car name
(integer) 0
2.3 列表(Lists)
命令 | 作用 |
---|---|
LPUSH key value [value ...] |
從佇列的左邊入隊一個或多個元素 |
RPUSH key value [value ...] |
從佇列的右邊入隊一個或多個元素 |
LPOP key |
從佇列的左邊彈出一個元素 |
RPOP key |
從佇列的右邊彈出一個元素 |
LRANGE key start stop |
從列表中獲取指定返回的元素 |
LREM key count value |
從列表中刪除元素 |
10.0.0.10:6379> LPUSH list R1
(integer) 1
10.0.0.10:6379> LPUSH list R2
(integer) 2
10.0.0.10:6379> LPUSH list R3
(integer) 3
10.0.0.10:6379> LPUSH list R4
(integer) 4
10.0.0.10:6379> LLEN list
(integer) 4
# 會顯示右側序列為1的到序列為3範圍內的,右側第一的數的序列為0
10.0.0.10:6379> LRANGE list 1 3
1) "R3"
2) "R2"
3) "R1"
# 左右彈出資料
10.0.0.10:6379> LPOP list
"R4"
10.0.0.10:6379> LPOP list
"R3"
10.0.0.10:6379> RPOP list
"R1"
10.0.0.10:6379> RPOP list
"R2"
# 左右push資料
10.0.0.10:6379> LPUSH list 1
(integer) 1
10.0.0.10:6379> LPUSH list 2
(integer) 2
10.0.0.10:6379> RPUSH list 3
(integer) 3
10.0.0.10:6379> RPUSH list 4
(integer) 4
# 此時在此列表中資料從左至右為2134
10.0.0.10:6379> LRANGE list 0 3
1) "2"
2) "1"
3) "3"
4) "4"
10.0.0.10:6379> LINDEX list 0
"2"
10.0.0.10:6379> LINDEX list 1
"1"
10.0.0.10:6379> LINDEX list 2
"3"
10.0.0.10:6379> LINDEX list 3
"4"
10.0.0.10:6379> LINDEX list -1
"4"
10.0.0.10:6379> LINDEX list -2
"3"
10.0.0.10:6379> LINDEX list -3
"1"
10.0.0.10:6379> LINDEX list -4
"2"
值與位置的一一對應關係
k1 | k2 | k3 | k4 |
---|---|---|---|
3 | 2 | 1 | 0 |
-1 | -2 | -3 | -4 |
下標(index)引數 start 和 stop 都以 0 為底,也就是說,以 0
表示列表的第一個元素,以 1
表示列表的第二個元素,以此類推。也可以使用負數下標,以 -1
表示列表的最後一個元素, -2
表示列表的倒數第二個元素,以此類推。
2.4 集合(Sets)
命令 | 作用 |
---|---|
SADD key member [member ...] |
新增一個或多個元素到集合(set)裡 |
SREM key member [member ...] |
|
SMEMBERS key |
獲取集合裡面的所有元素 |
SDIFF key [key ...] |
獲取佇列不存在的元素,差集 |
SINTER key [key ...] |
獲取兩個集合的交集 |
SUNION key [key ...] |
獲取兩個集合的並集 |
SCARD key |
獲取集合裡面的元素數量 |
SDIFFSTORE destination key [key ...] |
獲得兩個集合的差集,並存儲在一個關鍵的結果集 |
SINTERSTORE destination key [key ...] |
獲得兩個集合的交集,並存儲在一個關鍵的結果集 |
SUNIONSTORE destination key [key ...] |
獲得兩個集合的並集,並存儲在一個關鍵的結果集 |
10.0.0.10:6379> SADD word1 a # 新增集合資料
(integer) 1
10.0.0.10:6379> SADD word1 a b c
(integer) 2
10.0.0.10:6379> SADD word1 a b c d e
(integer) 2
10.0.0.10:6379> SREM word1 e # 刪除集合資料
(integer) 1
10.0.0.10:6379> SMEMBERS word1 # 檢視集合資料
1) "c"
2) "a"
3) "b"
4) "d"
10.0.0.10:6379> SISMEMBER word1 b # 判斷指定元素是否存在於集合中
(integer) 1
10.0.0.10:6379> SISMEMBER word1 e
(integer) 0
10.0.0.10:6379> SADD word2 1 2 3
(integer) 3
10.0.0.10:6379> SADD word3 2 3 4
(integer) 3
10.0.0.10:6379> SDIFF word2 word3 # 差集
1) "1"
10.0.0.10:6379> SDIFF word3 word2
1) "4"
10.0.0.10:6379> SINTER word2 word3 # 交集
1) "2"
2) "3"
10.0.0.10:6379> SUNION word2 word3 # 並集
1) "1"
2) "2"
3) "3"
4) "4"
10.0.0.10:6379> SCARD word1 # 統計集合中元素的個數
(integer) 4
10.0.0.10:6379>
10.0.0.10:6379> SCARD word2
(integer) 3
10.0.0.10:6379> SCARD word3
(integer) 3
10.0.0.10:6379> SDIFFSTORE haha word2 word3 # 獲取兩個集合的交集並存儲在一個關鍵集中
(integer) 1
10.0.0.10:6379> TYPE haha
set
10.0.0.10:6379> SCARD haha
(integer) 1
10.0.0.10:6379> SMEMBERS haha
1) "1"
10.0.0.10:6379>
2.5 有序集合(Sorted sets)
命令 | 作用 |
---|---|
ZADD key [NX|XX] [CH] [INCR] score member [score member ...] |
新增到有序set的一個或多個成員,如果它已經存在會更新分數 |
ZSCORE key member |
獲取成員在排序設定相關的比分 |
ZRANGE key start stop [WITHSCORES] |
根據指定的index返回有序集合的成員列表 |
10.0.0.10:6379> ZADD test 1 zhang 2 wang 3 li
(integer) 3
10.0.0.10:6379> ZSCORE test zhang
"1"
10.0.0.10:6379> ZSCORE test wang
"2"
10.0.0.10:6379> ZSCORE test li
"3"
10.0.0.10:6379> ZRANGE test 0 -1 # 0代表第一個,-1代表最後一個,故0 -1能顯示全部資料
1) "zhang"
2) "wang"
3) "li"
10.0.0.10:6379> ZRANGE test 2 3
1) "li"
10.0.0.10:6379> ZRANGE test -2 -1
1) "wang"
2) "li"
值與位置對應關係
zhang | wang | li |
---|---|---|
0 | 1 | 2 |
-1 | -2 | -3 |