南寧模板做網(wǎng)站搜索引擎優(yōu)化seo專員招聘
安裝包地址:https://github.com/tporadowski/redis/releases
建議下載zip版本,解壓即可使用。解壓后,依次打開目錄下的redis-server.exe和redis-cli.exe,redis-cli.exe用于輸入指令。
一、基本結(jié)構(gòu)
如圖,redis對(duì)外有個(gè)端口,用戶發(fā)出的指令都要通過(guò)這個(gè)端口。redis是在內(nèi)存中操作的,這是它比別的數(shù)據(jù)庫(kù)快的主要原因之一,內(nèi)存中的結(jié)構(gòu)分為核心組件和數(shù)據(jù)庫(kù),核心組件負(fù)責(zé)解析指令,存取數(shù)據(jù)和執(zhí)行指令。Redis默認(rèn)有16個(gè)數(shù)據(jù)庫(kù),初始默認(rèn)使用0號(hào)庫(kù),編號(hào)是0…15。內(nèi)存中的數(shù)據(jù)庫(kù)最后存到磁盤中,實(shí)現(xiàn)數(shù)據(jù)持久化。
二、redis的數(shù)據(jù)類型
Redis的五大數(shù)據(jù)類型是:String(字符串)、Hash(哈希)、List(列表)、Set(集合)和zset(sorted set:有序集合)
(1)String(字符串):
最基本的類型,一個(gè)鍵對(duì)應(yīng)一個(gè)字符串值。
可以存儲(chǔ)文本、數(shù)字、甚至二進(jìn)制數(shù)據(jù)(如圖片)。
常用操作:
SET key value:設(shè)置鍵的值。
GET key:獲取鍵的值。
INCR key:對(duì)存儲(chǔ)的數(shù)字自增。
(2)Hash(哈希):
鍵對(duì)應(yīng)一個(gè)哈希表,哈希表由字段和字段值組成(類似GO中的map)。
常用操作:
HSET key field value:設(shè)置哈希表的字段值。
HGET key field:獲取哈希表的字段值。
HGETALL key:獲取哈希表中所有字段和值。
(3)List(列表):
鍵對(duì)應(yīng)一個(gè)列表,列表可以從兩端進(jìn)行插入和刪除操作。
常用操作:
LPUSH key value:從左側(cè)插入一個(gè)值。
RPUSH key value:從右側(cè)插入一個(gè)值。
LPOP key:從左側(cè)移除并返回一個(gè)值。
(4)Set(集合):
鍵對(duì)應(yīng)一個(gè)無(wú)序集合,集合中的元素是唯一的,不允許重復(fù)。
常用操作:
SADD key member:向集合添加一個(gè)元素。
SREM key member:移除集合中的某個(gè)元素。
SMEMBERS key:獲取集合中所有元素。
(5)Sorted Set(有序集合):
與集合類似,但每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)分?jǐn)?shù),根據(jù)分?jǐn)?shù)排序。
常用操作:
ZADD key score member:向有序集合添加元素和對(duì)應(yīng)的分?jǐn)?shù)。
ZRANGE key start stop:按照分?jǐn)?shù)從低到高返回集合中的元素。
ZREM key member:移除有序集合中的某個(gè)元素。
三、string中的CRUD
CRUD是數(shù)據(jù)庫(kù)基本操作,其含義如下:
C - Create(創(chuàng)建):插入新記錄或創(chuàng)建新數(shù)據(jù)。
例如:在 MySQL 中,INSERT INTO 是創(chuàng)建數(shù)據(jù)的常用 SQL 語(yǔ)句。
R - Read(讀取):讀取數(shù)據(jù)或查詢數(shù)據(jù)。
例如:SELECT 是讀取數(shù)據(jù)的常用操作。
U - Update(更新):修改現(xiàn)有數(shù)據(jù)。
例如:UPDATE 用于更新數(shù)據(jù)庫(kù)中的記錄。
D - Delete(刪除):刪除數(shù)據(jù)。
例如:DELETE FROM 用于刪除數(shù)據(jù)。
redis中的string的基本操作語(yǔ)法如下:
1.添加key-val:[set]
2.查看當(dāng)前redis的所有key:[keys *]
3.獲取key:[get key]
4.刪除key:[del key]
5.切換redis數(shù)據(jù)庫(kù):[select index]
6.如何查看當(dāng)前數(shù)據(jù)庫(kù)的key-val數(shù)量:[dbsize]
7.清空當(dāng)前數(shù)據(jù)庫(kù)的key-val和清空所有數(shù)據(jù)庫(kù)的key-val:[flushdb] [flushall]
注意:redis中沒有update指令,但能通過(guò)set相同的key實(shí)現(xiàn)。
實(shí)例:
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get key1
(nil)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> dbsize
(integer) 1
127.0.0.1:6379> set key2 sgg
OK
127.0.0.1:6379> dbsize
(integer) 2
127.0.0.1:6379> set address ᄆᄆᄒᄅ
OK
127.0.0.1:6379> get address
"\xb1\xb1\xbe\xa9"
127.0.0.1:6379> set address beijing
OK
127.0.0.1:6379> get address
"beijing"
127.0.0.1:6379> del address
(integer) 1
127.0.0.1:6379> get address
(nil)
其中set address ᄆᄆᄒᄅ是設(shè)置了key的值為“北京”,其在內(nèi)存中的值為"\xb1\xb1\xbe\xa9"。其中(integer)num,表示操作是否成功或查詢的對(duì)象數(shù)量。
四、string中的setex,mset,mget
SETEX專門用于設(shè)置帶有過(guò)期時(shí)間的鍵值對(duì)。它的全稱是 “Set EXpire”,表示在設(shè)置鍵的同時(shí)定義其生存時(shí)間(TTL, Time to Live)。當(dāng)鍵的 TTL 到期后,Redis 會(huì)自動(dòng)刪除這個(gè)鍵。語(yǔ)法為:SETEX key seconds value,實(shí)例如下:
127.0.0.1:6379> setex msg01 10 hello,you
OK
127.0.0.1:6379> get msg01
"hello,you"
127.0.0.1:6379> get msg01
(nil)
這里設(shè)置了10秒后刪除鍵msg01,只有在10秒內(nèi)get才能獲取其值。
mset同時(shí)設(shè)置多個(gè)鍵值對(duì),mget一次獲取多個(gè)鍵的值,示例如下:
127.0.0.1:6379> mset worker01 tom worker02 scott
OK
127.0.0.1:6379> get worker02
"scott"
127.0.0.1:6379> mget worker01 worker02
1) "tom"
2) "scott"
五、hash
hash是一個(gè)鍵值對(duì)集合,相當(dāng)于GO中的map:var user1 map[string]string
Redis hash是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象。
舉例,存放一個(gè)User信息:
user1 name 張三 age 30
說(shuō)明:哈希表user1中存放了兩對(duì)field-value:name 張三和age 30。
hset為哈希表中的字段設(shè)置值,hget獲取哈希表中特定字段的值,hgetall獲取哈希表中的所有字段和值,hlen獲取哈希表的鍵值對(duì)個(gè)數(shù),hexists查看指定key是否在哈希表中。實(shí)例如下:
127.0.0.1:6379> hset user1 name "smith"
(integer) 1
127.0.0.1:6379> hset user1 age 30
(integer) 1
127.0.0.1:6379> hset user1 job "golang coder"
(integer) 1
127.0.0.1:6379> hget user1 name
"smith"
127.0.0.1:6379> hget user1 age
"30"
127.0.0.1:6379> hget user1 job
"golang coder"
127.0.0.1:6379> hgetall user1
127.0.0.1:6379> hmset user2 name jerry age 110 job "java coder"
OK
127.0.0.1:6379> hmget user2 name age job
1) "jerry"
2) "110"
3) "java coder"
127.0.0.1:6379> hlen user2
(integer) 3
127.0.0.1:6379> hexists user2 name
(integer) 1
127.0.0.1:6379> hexists user2 name2
(integer) 0
127.0.0.1:6379> hgetall user2
1) "name"
2) "jerry"
3) "age"
4) "110"
5) "job"
6) "java coder"
練習(xí):存放一個(gè)Student信息:
stu1 name 張三 age 30 score 80 address 北京
請(qǐng)通過(guò)相關(guān)指令,完成對(duì)Student的crud操作。
解析:
Create
127.0.0.1:6379> hmset stu1 name zhangsan age 30 score 80 address beijing
OK
Read
127.0.0.1:6379> hgetall stu1
1) "name"
2) "zhangsan"
3) "age"
4) "30"
5) "score"
6) "80"
7) "address"
8) "beijing"
Update
127.0.0.1:6379> hset stu1 name lisi
(integer) 0
127.0.0.1:6379> hgetall stu1
1) "name"
2) "lisi"
3) "age"
4) "30"
5) "score"
6) "80"
7) "address"
8) "beijing"
Delete
127.0.0.1:6379> hdel stu1 age
(integer) 1
127.0.0.1:6379> hgetall stu1
1) "name"
2) "lisi"
3) "score"
4) "80"
5) "address"
6) "beijing"
注意:HSET 的返回值并不表示值是否更新,而是表示字段是否是新插入的。如果字段是新插入的,返回 (integer) 1。如果字段已經(jīng)存在(無(wú)論值是否改變),返回 (integer) 0。