Redis安裝配置,參考上一篇博文redis
數據庫
進入目錄
cd /usr/local/redis/bin/
服務器鏈接redis
./redis-cli
,出現127.0.0.1:6379>
則鏈接成功app默認有16個數據庫,db0~15dom
切換數據庫select index
select 1
索引從0開始測試顯示全部的key鍵
keys *
,能夠用tab鍵補全命令,補全命令爲大寫ui
set,設置鍵
set name test1
spaget,獲取鍵值
get name
unixexist,判斷鍵是否存在,返回1存在和0不存在
exist name
codeappend,若是鍵不存在則建立該鍵,返回鍵的值長度;若是鍵存在則追加,返回追加後值長度
append name test1
若是值有空格,則須要加引號
append name "zhang san"
strlen,獲取key的長度
strlen name
EX、PX表示失效時間,單位爲秒和毫秒,不能同時使用,NX表示數據庫中不存在時才能設置,XX表示存在時才能設置
set key value [expiration EX seconds|PX milliseconds] [NX|XX]
ttl查看過時剩餘時間,-2表示過時
127.0.0.1:6379> set job tester1 EX 10 NX
OK
127.0.0.1:6379> ttl job
(integer) 6
127.0.0.1:6379> ttl job
(integer) 5
127.0.0.1:6379> ttl job
(integer) 4
127.0.0.1:6379> ttl job
(integer) 3
127.0.0.1:6379> ttl job
(integer) 2
127.0.0.1:6379> ttl job
(integer) 2
127.0.0.1:6379> ttl job
(integer) 1
127.0.0.1:6379> ttl job
(integer) -2
127.0.0.1:6379> ttl job
進行第二次set設置,ttl值會顯示-1
127.0.0.1:6379> set job tester1
OK
127.0.0.1:6379> set job tester1 EX 10 NX
(nil)
127.0.0.1:6379> ttl job
(integer) -1flushdb,清空數據庫
flushdb
查看全部key鍵則會顯示(empty list or set)
incr,遞增1
127.0.0.1:6379> set age 22
OK
127.0.0.1:6379> incr age
(integer) 23
127.0.0.1:6379> get age
"23"
decr,遞減1
127.0.0.1:6379> get age
"23"
127.0.0.1:6379> decr age
(integer) 22
127.0.0.1:6379> get age
"22"del,刪除鍵,刪除後還能夠用incr遞增、decr遞減進行操做,可是基於默認值0
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> incr age
(integer) 1
127.0.0.1:6379> get age
"1"
127.0.0.1:6379> decr age
(integer) 0
127.0.0.1:6379> get age
"0"下面字符串能轉換爲整型
127.0.0.1:6379> set age "22"
OK
127.0.0.1:6379> get age
"22"
127.0.0.1:6379> incr age
(integer) 23
127.0.0.1:6379> get age
"23"下面字符串不能轉換爲整型
127.0.0.1:6379> set age "hello"
OK
127.0.0.1:6379> incr age
(error) ERR value is not an integer or out of rangeincrby,遞增,能夠設置步長
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> incrby age 5
(integer) 25
127.0.0.1:6379> get age
"25"不加步長會報錯
127.0.0.1:6379> incrby age
(error) ERR wrong number of arguments for 'incrby' commanddecrby,遞減,能夠設置步長
getset,獲取值並設置新的值
127.0.0.1:6379> get age
"25"
127.0.0.1:6379>
127.0.0.1:6379> getset age 30
"25"
127.0.0.1:6379> get age
"30"setex,設置過時時間
setex key seconds value
,等同於set key value ex seconds
setnx,當key不存在時,才能設置,等同於
set key value nx
,key存在則不能設置setrange,設置指定索引位置的字符,索引0開始
從索引爲6的位置開始替換
setrange key offset value
127.0.0.1:6379> set age "hello world"
OK
127.0.0.1:6379> get age
"hello world"
127.0.0.1:6379> setrange age 6 job
(integer) 11
127.0.0.1:6379> get age
"hello jobld"超過的長度使用0代替
127.0.0.1:6379> setrange age 20 job
(integer) 23
127.0.0.1:6379> get age
"hello jobld\x00\x00\x00\x00\x00\x00\x00\x00\x00job"getrange,獲取指定索引位置的字符,索引0開始
getrange key start end
獲取閉合區間裏的值,[1,3]
127.0.0.1:6379> set age "hello world"
OK
127.0.0.1:6379> getrange age 1 3
"ell"mset,批量設置key
mset key value [key value ...]
mget,批量獲取key
mget key [key ...]
127.0.0.1:6379> mset job1 1 job2 2 job3 3
OK
127.0.0.1:6379> mget job1 job2 job3
1) "1"
2) "2"
3) "3"msetnx,批量設置key,若是key都不存在則成功返回1,如有一個存在則失敗返回0
msetnx j 1 k 2 l 3 [key
lpush,建立鍵及其關聯的List,而後將參數values從左到右排序
lrange獲取從位置0到位置2的元素,
0 -1
獲取所有元素,-3 -2
獲取倒數第3個到第2個元素,0 0
獲取第一個元素127.0.0.1:6379> lpush age 1 2 3 4
(integer) 4
127.0.0.1:6379> lrange age 0 2
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> lrange age 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> lrange age -3 -2
1) "3"
2) "2"
127.0.0.1:6379> lrange age 0 0
1) "4"type,查看數據類型
type age
lpushx,鍵存在時才能插入,不存在返回0
127.0.0.1:6379> lpushx age123 1 2
(integer) 0
127.0.0.1:6379> lpushx age 1 2
(integer) 6
127.0.0.1:6379> lrange age 0 -1
1) "2"
2) "1"
3) "4"
4) "3"
5) "2"
6) "1"lpop,卻出鏈表頭部的元素,至關於刪除
127.0.0.1:6379> lrange age 0 -1
1) "1"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lpop age
"1"
127.0.0.1:6379> lrange age 0 -1
1) "4"
2) "3"
3) "2"
4) "1"llen,返回列表長度
127.0.0.1:6379> lrange age 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> llen age
(integer) 4lrem,刪除幾個值等於x的元素,並返回個數
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush age 1 1 2 3 3 4 5
(integer) 7
127.0.0.1:6379> lrem age 2 1
(integer) 2
127.0.0.1:6379> lrange age 0 -1
1) "5"
2) "4"
3) "3"
4) "3"
5) "2"lindex,獲取索引對應的值
127.0.0.1:6379> lrange age 0 -1
1) "5"
2) "4"
3) "3"
4) "3"
5) "2"
127.0.0.1:6379> lindex age 1
"4"
127.0.0.1:6379> lindex age 0
"5"索引值超過鏈表中元素數量,則返回nil
lset,修改索引對應的元素值
127.0.0.1:6379> lrange age 0 -1
1) "5"
2) "4"
3) "3"
4) "3"
5) "2"
127.0.0.1:6379> lset age 0 a
OK
127.0.0.1:6379> lrange age 0 -1
1) "a"
2) "4"
3) "3"
4) "3"
5) "2"設置的索引值超過鏈表中的元素數量,則返回error
ltrim,僅保留索引之間的元素,索引值倆邊也被保留
127.0.0.1:6379> lrange age 0 -1
1) "a"
2) "4"
3) "3"
4) "3"
5) "2"
127.0.0.1:6379> ltrim age 0 2
OK
127.0.0.1:6379> lrange age 0 -1
1) "a"
2) "4"
3) "3"linset,在具體值前面插入新元素或者後面插入新元素
linsert key BEFORE|AFTER pivot value
127.0.0.1:6379> lrange age 0 -1
1) "c"
2) "b"
3) "a"
4) "a"
5) "4"
6) "3"
127.0.0.1:6379> linsert age before c d
(integer) 7
127.0.0.1:6379> lrange age 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "a"
6) "4"
7) "3"
127.0.0.1:6379> linsert age after c ff
(integer) 8
127.0.0.1:6379> lrange age 0 -1
1) "d"
2) "c"
3) "ff"
4) "b"
5) "a"
6) "a"
7) "4"
8) "3"rpush,從鏈表尾部插入參數,順序是從右到左依次插入
127.0.0.1:6379> rpush age a b c d e
(integer) 5
127.0.0.1:6379> lrange age 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"rpushx,將元素插入鏈表尾部
127.0.0.1:6379> rpushx age f
(integer) 6
127.0.0.1:6379> lrange age 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"rpop,從鏈表尾部取出元素,至關於刪除
127.0.0.1:6379> lrange age 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> rpop age
"f"
127.0.0.1:6379> lrange age 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"rpoplpush,將一個鏈表的元素最後一位取出,添加到另一個鏈表的頭部
127.0.0.1:6379> lrange age 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> lrange age1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> rpoplpush age age1
"e"
127.0.0.1:6379> lrange age1 0 -1
1) "e"
2) "3"
3) "2"
4) "1"將source和destination設爲同一鍵,將鏈表中的尾部元素移到其頭部
127.0.0.1:6379> lrange age 0 -1
1) "d"
2) "a"
3) "b"
4) "c"
127.0.0.1:6379> rpoplpush age age
"c"
127.0.0.1:6379> lrange age 0 -1
1) "c"
2) "d"
3) "a"
4) "b"
sadd,當鍵不存在,才能成功插入多個元素
sadd age 1 2 3
不能插入重複數據
127.0.0.1:6379> smembers age
1) "1"
2) "2"
3) "3"
4) "123"
127.0.0.1:6379> sadd age 1 4 5
(integer) 2
127.0.0.1:6379> smembers age
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "123"smembers,查看集合中的元素
smembers age
sismember,判斷元素是否存在,存在返回1,不存在返回0
127.0.0.1:6379> sismember age 9
(integer) 0
127.0.0.1:6379> sismember age 1
(integer) 1scard,獲取集合元素數量
scard age
srandmember,隨機返回一個成員,但仍是存在集合中
srandmember age
spop,隨機取出一個成員,集合中就被刪除了
spop age
srem,從集合中取出元素,只會提取存在的元素
127.0.0.1:6379> sadd age 1 2 3 4 5
(integer) 5
127.0.0.1:6379> srem age 1 2 a
(integer) 2
127.0.0.1:6379> smembers age
1) "3"
2) "4"
3) "5"smove,將一個集合元素移動到另一個集合中
127.0.0.1:6379> smembers age
1) "3"
2) "4"
3) "5"
127.0.0.1:6379> sadd age1 a b c
(integer) 3
127.0.0.1:6379> smembers age1
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smove age age1 3
(integer) 1
127.0.0.1:6379> smembers age1
1) "3"
2) "c"
3) "a"
4) "b"sdiff,比較幾個集合中存在差別的元素
其中四、5是age3中沒有的元素
127.0.0.1:6379> smembers age
1) "4"
2) "5"
127.0.0.1:6379> smembers age1
1) "3"
2) "c"
3) "a"
4) "b"
127.0.0.1:6379> smembers age3
1) "u"
2) "i"
127.0.0.1:6379> sdiff age age1
1) "4"
2) "5"
127.0.0.1:6379> sdiff age age1 age3
1) "4"
2) "5"sdiffstore,將三個集合的差別元素存儲在destination關聯的Set中,並返回插入的元素數量
127.0.0.1:6379> sdiffstore destination age age1 age3
(integer) 2
127.0.0.1:6379> smembers destination
1) "4"
2) "5"sinter,獲取多個集合直接的交集
sinter age age1 age3
sinterstore,將三個集合的交集元素存儲在destination關聯的Set中,並返回交集的數量
sinterstore age age1 age3
sunion,獲取多個集合之間的並集
sunion age age1 age3
sunionstore,將三個集合的並集元素存儲在destination關聯的Set中,並返回並集的數量
sunionstore age age1 age3
也稱爲Zset,Redis 有序集合和集合同樣也是string類型元素的集合,且不容許重複的成員,但分數(score)卻能夠重複,redis正是經過分數來爲集合中的成員進行從小到大的排序。
zadd
添加1個分數爲10的成員
zadd age 10 a
添加2個分數爲20,30的成員
zadd age 20 b 30 c
zrange
經過索引獲取元素,
0 -1
表示所有元素zrange age 0 -1
加WITHSCORES表示返回結果帶分數
zrange age 0 -1 WITHSCORES
zcard,獲取test鍵中成員數量
zcard age
zrank,獲取成員在集合中的索引,從0開始
zrank age a
zcount,獲取符合條件的成員數量,分數知足10-20的成員數量
zcount age 10 20
zrem,刪除成員並返回刪除的數量
zrem age a b
zscore,獲取成員的分數,返回的是字符串形式
zscore age c
zincrby,增長或減小(-)成員的分數,返回增長後的分數
zincrby age 10 c
zrangebyscore,經過分數獲取知足條件的成員
zrangebyscore age 10 20
inf表示第一個成員,+inf表示最後一個成員,limit後面的參數用於限制返回成員的數量, limit 2 2,2表示從位置索引(0-based)等於2的成員開始,取後面2個成員,成員不足就有多少顯示多少,相似於MySQL中的limit
zrangebyscore age -inf +inf
zrangebyscore age -inf +inf withscores
zrangebyscore age -inf +inf limit 2 2
zrangebyscore age -inf +inf withscores limit 2 2
zrangebyscore age 10 20 withscores limit 2 2
zremrangebyscore,根據分數條件刪除成員並返回刪除數量
zremrangebyscore age 10 20
zremrangebyrank,根據索引條件刪除成員
zremrangebyrank age 0 1
zrevrange,按索引高到低獲取成員
zrevrange age
獲取前10,
zrevange age 0 9
zrevrangebyscore,根據索引從高到低根據分數獲取成員
zrevrangebyscore age 30 10
zrevrank,索引由高到低的排序,獲取成員在集合中的索引
zrevrank age a
hset,給鍵設置字段
hset me name zhangsan
hget,獲取字段
hget me name
hlen,獲取字段數量
hlen me
hexists,判斷字段是否存在,存在返回1
hexists me height
hdel,刪除字段,成功返回1,重複刪除返回0
hdel me name
hsetnx,添加新字段,並設置值
hsetnx me age 22
hincrby,給字段的值加一、或者減-1
hincrby me age 1
hmset,設置多個字段
hmset me height 177 weight 140
hmget,獲取多個字段
hmget me height age
hgetall,返回全部字段及值
hgetall me
hkeys,獲取全部字段的名字
hkeys me
hvals,獲取全部字段的值
hvals me
keys * ,顯示全部的鍵
del ,刪除一個或多個鍵
批量刪除
exists,判斷key是否存在,不存在返回0
move,將當前數據庫的鍵移動到其它db1數據庫
127.0.0.1:6379> exists age
(integer) 1
127.0.0.1:6379> move age 1
(integer) 1
127.0.0.1:6379> EXISTS age
(integer) 0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> EXISTS age
(integer) 1rename,修改鍵的名稱
rename age newage
renamenx,當新名稱不存在時才執行
127.0.0.1:6379[1]> set city shanghai
OK
127.0.0.1:6379[1]> set newcity hangzhou
OK
127.0.0.1:6379[1]> renamenx city newcity
(integer) 0
127.0.0.1:6379[1]> get city
"shanghai"
127.0.0.1:6379[1]> get newcity
"hangzhou"ttl,給鍵設置超時時間,單位秒
set age ex 100
ttl age
查看剩餘多久persist,將設置超時的鍵改成永久鍵
persist age 100
ttl age
查看剩餘時間,返回-1
表明該鍵已經變爲永久expire,更新鍵超時時間
expire age 200
expireat,unix時間戳格式設置鍵超時時間
expireat age 1588918492
不一樣類型的測試數據,用type來查看數據類型
127.0.0.1:6379[1]> set name katy
OK
127.0.0.1:6379[1]> lpush testlist a b c
(integer) 3
127.0.0.1:6379[1]> sadd testset 1 2 3
(integer) 3
127.0.0.1:6379[1]> zadd testzset 10 a 20 b
(integer) 2
127.0.0.1:6379[1]> hset testhash name zhangsan age 20
(integer) 2
127.0.0.1:6379[1]> type name
string
127.0.0.1:6379[1]> type testlist
listrandomkey,返回任意鍵
flushdb,清空當前數據庫
dbsize,返回當前數據庫key的數量
事務中若是有一條命令執行失敗,其後命令仍然會被執行
multi,添加新事務,標記事務的開始
exec,執行一個事務命令隊列內的全部命令
discard,回滾事務隊命令列內的全部命令。discard只能在exec前執行
執行第一條命令,但命令是存在事務命令隊列的,沒有當即執行
127.0.0.1:6379[1]> incr age
QUEUED執行第二條命令,命令也被存在事務命令隊列的,沒有當即執行
127.0.0.1:6379[1]> incr age2
QUEUED執行全部事務命令隊列中全部命令
127.0.0.1:6379[1]> exec
1) (integer) 1
2) (integer) 1
127.0.0.1:6379[1]> get age
"1"
127.0.0.1:6379[1]> get age2
"1"開啓新事務,設置鍵及string類型的值
set name zhangsan
從鍵name所關聯的值的頭部彈出元素,因爲該值是字符串類型,而lpop命令僅能用於List類型,所以在執行exec命令時,該命令將會失敗
127.0.0.1:6379[1]> lpop name
(error) WRONGTYPE Operation against a key holding the wrong kind of value再次設置鍵name的值爲字符串,獲取鍵name的值,以便確認該值是否被事務中的第二個set命令設置成功
127.0.0.1:6379[1]> set name lisi
OK
127.0.0.1:6379[1]> get name
"lisi"從結果中能夠看出,事務中的第二條命令lpop執行失敗,而其後的set和get命令均執行成功,這一點是Redis的事務與關係型數據庫中的事務之間最爲重要的差異
爲鍵city設置一個事務執行前的值;開啓一個事務;在事務內爲該鍵設置一個新值;放棄事務;查看鍵city的值,從結果中能夠看出該鍵的值仍爲事務開始以前的值
127.0.0.1:6379[1]> set name lisi
OK
127.0.0.1:6379[1]> get name
"lisi"
127.0.0.1:6379[1]> set city shanghai
OK
127.0.0.1:6379[1]> multi
OK
127.0.0.1:6379[1]> set city hangzhou
QUEUED
127.0.0.1:6379[1]> discard
OK
127.0.0.1:6379[1]> get city
"shanghai"discard只能在exec前執行
127.0.0.1:6379[1]> discard
(error) ERR DISCARD without MULI