Redis 簡(jiǎn)介REmote DIctionary Server(Redis)
是一個(gè)由Salvatore Sanfilippo寫的key-value存儲(chǔ)系統(tǒng)暂刘。
Redis是一個(gè)開源的使用ANSI C語言編寫斤斧、遵守BSD協(xié)議、支持網(wǎng)絡(luò)递胧、可基于內(nèi)存亦可持久化的日志型碑韵、Key-Value數(shù)據(jù)庫(kù),并提供多種語言的API缎脾。
它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器祝闻,因?yàn)橹担╲alue)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
Redis 是完全開源的遗菠,遵守 BSD 協(xié)議联喘,是一個(gè)高性能的 key-value 數(shù)據(jù)庫(kù)。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
Redis支持?jǐn)?shù)據(jù)的持久化辙纬,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中豁遭,重啟的時(shí)候可以再次加載進(jìn)行使用。
Redis不僅僅支持簡(jiǎn)單的key-value類型的數(shù)據(jù)贺拣,同時(shí)還提供list蓖谢,set,zset譬涡,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)闪幽。
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份昂儒。
Redis 優(yōu)勢(shì)
性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 沟使。
豐富的數(shù)據(jù)類型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作委可。
原子 – Redis的所有操作都是原子性的渊跋,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個(gè)操作是原子性的着倾。多個(gè)操作也支持事務(wù)拾酝,即原子性,通過MULTI和EXEC指令包起來卡者。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性蒿囤。
Redis與其他key-value存儲(chǔ)有什么不同?
Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對(duì)他們的原子性操作崇决,這是一個(gè)不同于其他數(shù)據(jù)庫(kù)的進(jìn)化路徑材诽。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時(shí)對(duì)程序員透明底挫,無需進(jìn)行額外的抽象。
Redis運(yùn)行在內(nèi)存中但是可以持久化到磁盤脸侥,所以在對(duì)不同數(shù)據(jù)集進(jìn)行高速讀寫時(shí)需要權(quán)衡內(nèi)存建邓,因?yàn)閿?shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫(kù)方面的另一個(gè)優(yōu)點(diǎn)是睁枕,相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu)官边,在內(nèi)存中操作起來非常簡(jiǎn)單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強(qiáng)的事情外遇。同時(shí)注簿,在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因?yàn)樗麄儾⒉恍枰M(jìn)行隨機(jī)訪問跳仿。
啟動(dòng)redis: redis-server.exe conf/redis-6379.conf
數(shù)據(jù)類型:hash, string, list, set, nil, sortedset /zset
操作指令
string類型指令
添加修改數(shù)據(jù): set key value >set username zhangsan
獲取數(shù)據(jù): get key >get username
刪除數(shù)據(jù): del key >del username
判定性添加數(shù)據(jù): setnx key value >setnx username zhangsan
添加修改多個(gè)數(shù)據(jù): mset key1 value1 key2 value2 …
>mset k1 v1 k2 v2 k3 v3 ……
獲取多個(gè)數(shù)據(jù): mget key1 key2 …… > mget k1 k2 k3 ……
獲取數(shù)據(jù)字符個(gè)數(shù)(字符串長(zhǎng)度):strlen key
>strlen username (return 8)
>strlen k1 (return 2)
追加信息到原始信息后面诡渴,若沒有就創(chuàng)建:
append key value
>append username 1 (zhangsan1)
>append password 123 (123)
設(shè)置整形數(shù)據(jù)自增/自減(默認(rèn)自增/自減1)
incr key
>set num 1
>incr/decr num (2)
>incr/decr num (3)
設(shè)置整形數(shù)據(jù)值自增/自減指定數(shù)
incrby/decrby key increment
>incrby/decrby num 10 (13)
incrbyfloat key increment
>incrbyfloat num 1.5 (14.5)
設(shè)置數(shù)據(jù)值具有指定的生命周期(支持自動(dòng)過期)
setex key seconds value
setex code 10 abcd
milliseconds 毫秒
hash基礎(chǔ)操作
添加修改數(shù)據(jù) hset key field value
>hset user:001 name zhangsan
hmset key field1 value1 field2 value2 …
>hmset user:001 password 123 age 18
hsetnx key field value
hsetnx user:001 name lisi
根據(jù)key和field獲取單個(gè)/多個(gè)value
hget key field
>hget user:001 name
hgetall key *
>hgetall user:001
刪除數(shù)據(jù) >hdel key field1 [field2 field3…]
>hdel user:001 name
>hdel user:001 password age
根據(jù)key獲取field的數(shù)量
hlen key
>hmset user:001 name zhangsan password 123 age 18
hlen user:001
判斷指定field是否存在
hexists key field
>hexists user:001 name (1)
>hexists user:001 name111 (0)
根據(jù)key獲取單個(gè)/所有的字段名field
hkey key
>hkey user:001
hvals key
hvals user:001
設(shè)置指定字段的數(shù)值增加指定范圍
hincrby key field increment
hincrbyfloat key field increment
hget user:001 age (18)
hincrby user:001 age 1 (19)
hincrby user:001 age -2 (17)
list基礎(chǔ)操作
添加數(shù)據(jù)—從左側(cè)添加
lpush key value1 [value2 value3 …]
>lpush list1 a b c (3--cba)
從右側(cè)添加 rpush key value1 [value2 value3 …]
>rpush list1 d e f (6--def)
當(dāng)前數(shù)據(jù)為:cbadef
范圍獲取 lrang key start stop
lrang list1 0 -1 (cbadef)
lrang list1 0 2 (cba)
lrang list1 -3 -1 (def)
獲取規(guī)則 1.從左到右索引cbadef---(0,1,2,3,4,5,6) …
2.從右到左索引cbadef---(-6,-5,-4,-3,-2,-1…)
Index key index
index list1 0
index list1 1
index list1 -1
移除并返回最左側(cè)和最右側(cè)的元素
lpop key
rpop key
>lpop list1 (c)
>lpop list1 (f)
根據(jù)key獲取value的個(gè)數(shù)
llen key
llen list1 (4)
key的基礎(chǔ)操作
刪除操作:del key >set aa bb
>del aa
>get aa (nil)
>hash hash1 k1 v1
>hgetall hash1 (k1, v1)
>del hash1
>hgetall hash1 (empty)
判斷key是否存在
>set aaa bbb
>exists aaa (1)
>exists bbb (0)
獲取key的類型
>set mystring hellostring
>hset myhash k1 v1
>type mystring
>type myhash
對(duì)list,set中的數(shù)據(jù)進(jìn)行排序
>sort key
>sort key desc
>lpush list1 11 2 33 7 5 18
>sort list1 (2,5,7,11,18,33)
>sort list1 desc (33,18,11,7,5,2)
對(duì)list中的字符串進(jìn)行排序
>sort key alpha
>sort key desc alpha
>lpush list2 a b c d
>sort list2 alpha (a,b,c,d)
重命名key
>set username zhangsan
>set username2 lisi
>rename username username2
>get username (nil)
>get username2 (zhangsan)
獲取key的有效時(shí)間
>del username zhangsan
>ttl username (-1)
>ttl username2 (-2)
>setex username3 30 wangwu
>ttl usernmae3 (21)
>pttl usernmae2 (15840)
為指定key設(shè)置有效時(shí)間
>hset hash1 k1 v1
>ttl hash1
>expire hash1 30 (1)
>ttl hash1 (20)
>hset hash2 k2 v2
>ttl hash2
>expire hash2 3000
>ttl hash2 (26)
>pttl hash2 (21380)
切換key從時(shí)效性轉(zhuǎn)換為永久性
setex username 60 zhangsan
ttl username (55)
persist username (1)
ttl username (-1)
存:zadd key score value
确朴铩:方式一:僅獲取value 不帶分?jǐn)?shù)score
zrange key start end
方式二:獲取value和score
zrange key start end withscores
刪:zrem key value