redis 入門

redis 入門

一、redis 安裝

==1)linux:==

wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar xvf redis-3.2.9.tar.gz
cd redis-3.2.9
make install PREFIX=/root/svr/redis-3.2.9 #安裝
src/redis-server ../redis.conf& #啟動
src/redis-cli #客戶端連接

==2)windows==
百度 N多。步驟簡單。如:https://www.cnblogs.com/jaign/articles/7920588.html

二、簡單命令介紹

==1)【set key value】==:設置 key 對應值。
獲取 key 的對應值。get key

127.0.0.1:6379> set key value
OK
127.0.0.1:6379> get key
"value"

==2)【setnx key value】==設置 key 對應的值,如果 key 存在,返回0 , nx 是 not exist的意思。

127.0.0.1:6379> setnx key value
(integer) 0
127.0.0.1:6379> setnx keynew value
(integer) 1

*==3)【keys 】==:查找key

127.0.0.1:6379> keys *
 1) "key2"
 2) "k4"
 3) "k3"
 4) "setname"
127.0.0.1:6379> keys k*
1) "key2"
2) "k4"
3) "k3"

==4)【exists key】==:查看 key 是否存在

127.0.0.1:6379> exists key
(integer) 1
127.0.0.1:6379> exists abd
(integer) 0

存在返回1,不存在,返回0
==5)【del key】==:刪除某個key

127.0.0.1:6379> del keynew
(integer) 1
127.0.0.1:6379> del keynew
(integer) 0

第一次返回1,刪除成功,第二次刪除失敗返回0.

==6)【expire】==:設置過期時間(單位秒)

127.0.0.1:6379> expire key 40
(integer) 1
127.0.0.1:6379> ttl key
(integer) 36
127.0.0.1:6379> ttl key
(integer) 33
127.0.0.1:6379> ttl key
(integer) 29
127.0.0.1:6379> ttl key
(integer) -2

ttl 查看剩下多少時間,返回負數(shù)則 key 失效,key 不存在。

==7)【setex】==:設置key同時,設定超時時間。

127.0.0.1:6379> setex key 10 value
OK
127.0.0.1:6379> ttl key
(integer) 6

==8)【mset】==:一次性設置多個key的值,成功返回ok,表示所有值都設置了,失敗返回0,表示沒有任何值被設置。

127.0.0.1:6379> mset key value key1 value key3 vlaue2
OK

==9)【getset oldkey newkey】==:設置 key 的值,并返回 key 的舊值。

127.0.0.1:6379> getset key aaaaa
"value"

==10)【mget】==:一次獲取多個key的值,對于的key不存在,則對應返回 nil

127.0.0.1:6379> mget key key1 key2 key3 key4
1) "aaaaa"
2) "value"
3) "aaaa"
4) "vlaue2"
5) (nil)

==11)【incr intkey】==:對key的值做加加操作,并返回新的值,注意 incr 一個不是 int 的value,會返回錯誤,incr 一個不存在的key 則會設置key為 1

127.0.0.1:6379> incr key
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incr ccc
(integer) 1
127.0.0.1:6379> incr ccc
(integer) 2
127.0.0.1:6379> incr ccc
(integer) 3

==12)【incrby intkey number】==:同incr類似,加指定的值,key不存在時候,會設置key,并認為越來的value 為 0 .

127.0.0.1:6379> incrby ccc 100
(integer) 103
127.0.0.1:6379> incrby aaa 10
(integer) 10

==13)【decr】==:對key的值做減減操作,如果 decr 一個不存在的 key , 則設置 key 為 -1

127.0.0.1:6379> decr bbb
(integer) -1
127.0.0.1:6379> decr bbb
(integer) -2
127.0.0.1:6379> decr aaa
(integer) 9

==14)【decrby】==:對key的值做指定的減減

127.0.0.1:6379> decrby aaa 100
(integer) -91

==15)【append】==:制定 key 的字符串追加 value, 返回新字符串的長度。

127.0.0.1:6379> get key
"aaaaaaaaa"
127.0.0.1:6379> append key bbbb
(integer) 13
127.0.0.1:6379> get key
"aaaaaaaaabbbb"

==16)【strlen】==:取指定 key 的 value 值的長度。

127.0.0.1:6379> strlen key
(integer) 13

==17)【persist】==: 取消過期時間

127.0.0.1:6379> setex time  1000 vvvv
OK
127.0.0.1:6379> ttl time
(integer) 996
127.0.0.1:6379> persist time
(integer) 1
127.0.0.1:6379> ttl time
(integer) -1
127.0.0.1:6379> get time
"vvvv"

==18)【select】==:選擇數(shù)據(jù)庫(0-15庫),單機版本,有數(shù)據(jù)庫的概念,可以使用select 進行切換。

127.0.0.1:6379> keys *
 1) "bbb"
 2) "key2"
 3) "k4"
 4) "k3"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)

==19)【move】==:把某個key移動到其他庫。

127.0.0.1:6379> move bbb 1
(integer) 1
127.0.0.1:6379> get bbb
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "bbb"

==20)【randomkey】==:隨機返回一個key

127.0.0.1:6379> randomkey
"k3"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"key2"
127.0.0.1:6379> randomkey
"time"

==21)【rename】==:重命名

127.0.0.1:6379> rename k3 k33333
OK

==22)【type】==:返回數(shù)據(jù)類型

127.0.0.1:6379> type ccc
string

23)==【dbsize】==:返回 key 的數(shù)量

127.0.0.1:6379> dbsize
(integer) 15

==24)【info】==:輸出redis信息

127.0.0.1:6379> info
# Server
redis_version:3.2.9
。。。。。。
executable:/data/redis/redis-3.2.9/src/redis-server
config_file:/data/redis/redis-3.2.9/redis.conf

# Clients
connected_clients:1
。。。。

# Memory
used_memory:822920
。。。。。

# Persistence
loading:0
。。。。。。

# Stats
total_connections_received:4
。。。。。

# Replication
role:master
。。。。

# CPU
used_cpu_sys:76.85
。。。。

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=15,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0

==25)【config get|set】== : 顯示與修改配置

127.0.0.1:6379> config get '*port*'
1) "port"
2) "6379"
3) "slave-announce-port"
4) "0"

三、數(shù)據(jù)類型
==1)String字符串:==

  • 格式:set key value
  • string 類型是二進制安全的,意思是 redis 的 string 可以包含任何數(shù)據(jù),比如jpg圖片或者序列化的對象。
  • string 類型是redis最基本的數(shù)據(jù)類型,一個鍵最大能存儲512MB
127.0.0.1:6379> set string 'aaaa'
OK
127.0.0.1:6379> get string
"aaaa"

==2)Hash(哈希)==

  • 格式:hmset name key1 value1 key2 value2
  • redis hash 是一個健值(key=>value)對集合。
  • redis hash 是一個String 累心的 field 和 value 的映射表,hash特別適合用于存儲對象。
  • 可以簡單的理解為一個 hashMap<key ,value>
127.0.0.1:6379> hmset myhash will 111 fff 2222 aaa 1111 ccc 3333
OK
127.0.0.1:6379> hget myhash will
"111"
127.0.0.1:6379> type myhash
hash

==3)List(列表)==

  • redis 列表是簡單的字符串列表,按照插入順序排序,你可以添加一個元素到列表頭(左邊)或著尾部(右邊)
  • 格式:lpush name value
    • 在key對應list 的頭部添加字符串元素。
  • 格式:rpush name value
    • 在key 對應list 的尾部添加字符串元素
  • 格式:lrem name index
    • key 對應list 中 count 個 和 value 相同的元素。
  • 格式:llen name
    • 返回 key 對應 list 的長度
127.0.0.1:6379> lpush mylist redis
(integer) 1
127.0.0.1:6379> lpush mylist mogodb
(integer) 2
127.0.0.1:6379> lpush mylist hbase
(integer) 3
127.0.0.1:6379> lrange mylist 0 10
1) "hbase"
2) "mogodb"
3) "redis"
.........
127.0.0.1:6379> lrange mylist 0 10
1) "hbase"
2) "hbase"
3) "hbase"
4) "hbase"
5) "mogodb"
6) "redis"
127.0.0.1:6379> lrem mylist 2 hbase
(integer) 2
127.0.0.1:6379> lrange mylist 0 10
1) "hbase"
2) "hbase"
3) "mogodb"
4) "redis"

==4)Set(集合)==
格式:sadd name value

  • Redis的set是string 類型的無序集合。
  • 集合是通過hash實現(xiàn)的,所以添加,刪除,查找的復雜度都是0(1)。
127.0.0.1:6379> sadd myset redis
(integer) 1
127.0.0.1:6379> sadd myset redis
(integer) 0
127.0.0.1:6379> sadd myset hbase
(integer) 1
127.0.0.1:6379> sadd myset mogodb
(integer) 1
127.0.0.1:6379> smembers myset
1) "mogodb"
2) "hbase"
3) "redis"

==5)zset(sorted set:有序集合)==

  • 格式:zadd name score value
  • Redis zset 和 set 一樣 也是 string 類型元素的集合,且不允許重復的成員。
  • 不同的是每個元素都會關聯(lián)一個double類型的分數(shù)。redis正是通過分數(shù)來為集合中的每個成員從大到小排序的。
  • zset的成員是唯一的,但是分數(shù)(score)卻可以重復
127.0.0.1:6379> zadd myzset 1 redis
(integer) 1
127.0.0.1:6379> zadd myzset 2 redis
(integer) 0
127.0.0.1:6379> zadd myzset 3 mogodb
(integer) 1
127.0.0.1:6379> zadd myzset 1 hbase
(integer) 1
127.0.0.1:6379> zrangebyscore myzset 0 100
1) "hbase"
2) "redis"
3) "mogodb"

四、事務

redis 對事務的支持目前還比較簡單。redis 只能保證一個 client 發(fā)起的事務中的命令可以連續(xù)的執(zhí)行,而中間不會插入其他client的命令。由于 redis 是單線程來處理所有client 的請求的所以做到這點很容易的,一般情況下 redis 在接受到一個client 發(fā)來的命令后,會立刻處理并 返回處理結(jié)果,但是當一個client 在一個連接中發(fā)出multi命令有,這個鏈接會進入一個事務上下文,該鏈接后續(xù)的命令并不是立即執(zhí)行,而是先放到一個對聯(lián)中,當從此鏈接受到 exec 命令后,redis 會順序的執(zhí)行隊列中的所有命令,并將所有命令的運行結(jié)果打包到一起返回給 client 然后此鏈接就結(jié)束事務上下文。

開啟事務:multi 取消事務:discard 結(jié)束事務:exec

127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> set name wangwu
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> get age
QUEUED
127.0.0.1:6379> get name
QUEUED
127.0.0.1:6379> incr age
QUEUED
127.0.0.1:6379> exec
1) "20"
2) "wangwu"
3) (integer) 21
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr age
QUEUED
127.0.0.1:6379> incr name
QUEUED
127.0.0.1:6379> exec
1) (integer) 22
2) (error) ERR value is not an integer or out of range
127.0.0.1:6379> get age
"22"

五、發(fā)布與訂閱

發(fā)布訂閱(pub/sub)是一種消息通信模式,主要的目的是解耦消息發(fā)布和消息訂閱者之間的耦合,這點和設計模式中的觀察者模式比較相似,pub/sub 不僅僅解決發(fā)布者和訂閱者直接代碼級別耦合,也解決兩者在物理部署上的耦合。
訂閱主題:subscribe
取消主題:unsubscribe
推送:publish

127.0.0.1:6379> subscribe price
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "price"
3) (integer) 1
1) "message"
2) "price"
3) "aaaa"
1) "message"
2) "price"
3) "bbbb"
127.0.0.1:6379> publish price aaaa
(integer) 1
127.0.0.1:6379> publish price bbbb
(integer) 1

他們之間的配合方式:subscribe * 支持全部訂閱,使用 unsubscribe可以過濾掉部分。

六、持久化

持久化就是把內(nèi)存的數(shù)據(jù)寫到磁盤中去,防止服務宕機了內(nèi)存數(shù)據(jù)丟失,Redis提供了兩種持久化方法:RDB(默認)和AOF。
==1)RDB==
rdb 是 Redis DataBase 縮寫。
RDB 功能核心函數(shù) rdbSave(生成RDB文件)和rdbLoad(從文件加載到本地)兩個函數(shù)

11-redis數(shù)據(jù)持久化.jpg

  • redbSave 函數(shù):將內(nèi)存中的數(shù)據(jù)庫數(shù)據(jù)以RDB格式保存到磁盤(文件)中,文件存在,那么新的RDB文件將替換已有的RDB文件。
  • 在保存 RDB 文件期間,主進程會被堵塞,直到保存完成為止。
  • SAVE 和 BGSAVE 兩個命令是操作rdbSave函數(shù)的區(qū)別:
    • SAVE 直接調(diào)用rdbSave , 堵塞Redis 主進程,直到保存完成為止,在主進程保存完成之后向主進程發(fā)送信號,通知保存已完成。因為rdbSave在子進程被調(diào)用,所以Redis服務器在BGSAVE執(zhí)行期間仍然可以繼續(xù)處理客戶端的請求。
    • BGSAVE 則fork出一個進程,子進程負責調(diào)用rdbSave , 并在保存完成之后,向主進程發(fā)送信號,通知保存完成。因為rdbsave 在子進程被調(diào)用,所以redis服務器在BGSAVE 執(zhí)行期間,仍然可以繼續(xù)處理客戶端的請求。
  • rdbLoad 函數(shù):是redis 服務重啟或則啟動的時候回加載保存到磁盤的RDB文件加載到內(nèi)存中會被堵塞。
    存儲結(jié)構:(http://redisbook.readthedocs.io/en/latest/internal/rdb.html#id4)
+-------+-------------+-----------+-----------------+-----+-----------+
| REDIS | RDB-VERSION | SELECT-DB | KEY-VALUE-PAIRS | EOF | CHECK-SUM |
+-------+-------------+-----------+-----------------+-----+-----------+

保存策略:(關于redis.conf相關配置如何介紹,請看《redis.conf詳解》)
save 900 1 // 900秒(15分鐘)內(nèi)至少1個key值改變(則進行數(shù)據(jù)庫保存--持久化)
save 300 10 // 300秒(5分鐘)內(nèi)至少10個key值改變(則進行數(shù)據(jù)庫保存--持久化)
save 60 10000 // 60秒(1分鐘)內(nèi)至少10000個key值改變(則進行數(shù)據(jù)庫保存--持久化)

==2)AOF==
Aof 是 Append-only file 縮寫

----圖

每當執(zhí)行服務器(定時)任務或者函數(shù)時,flushAppendOnlyFile 函數(shù)都會被調(diào)用,這個函數(shù)執(zhí)行以下兩個工作。
aof寫入保存:
WRITE:根據(jù)條件,將aof_buf中的緩存寫入到AOF文件
SAVE:根據(jù)條件,調(diào)用fsync或fdatasync函數(shù),將AOF文件保存到磁盤中。
兩個步驟都需要根據(jù)一定的條件來執(zhí)行,redis提供了三種條件。

保存策略:

模式 WRITE是否阻塞 SAVE是否阻塞 停機時丟失的數(shù)據(jù)量
AOF_FSYNC_NO 不保存 阻塞 阻塞 操作系統(tǒng)最后一次對 AOF 文件觸發(fā) SAVE 操作之后的數(shù)據(jù)。
AOF_FSYNC_EVERYSEC 每一秒鐘保存一次 阻塞 不阻塞 一般情況下不超過 2 秒鐘的數(shù)據(jù)
AOF_FSYNC_ALWAYS每執(zhí)行一個命令保存一次 阻塞 阻塞 最多只丟失一個命令的數(shù)據(jù)。

存儲結(jié)構:
內(nèi)容是redis同學協(xié)議(RESP)格式的命令文本存儲。

==3)總結(jié)==

  • RDB模式的保存策略可以看出,他是有丟失的概率,有可能出現(xiàn)5分鐘才保存一次RDB文件。
  • AOF模式可以保證最少的數(shù)據(jù)丟失,就算停機故障了,最多只會丟失一秒鐘的數(shù)據(jù),但是他數(shù)據(jù)重新加載,速度比RDB慢。
  • AOF 在過去曾經(jīng)發(fā)生過這樣bug:因為個別命令的原因,導致AOF文件在重新載入時,無法將數(shù)據(jù)集恢復成保存時的原樣(如:堵塞命令 BRPOPLPUSH 就曾經(jīng)引起過這樣的bug。)
    so:個人建議還是讓專業(yè)的工具,做專業(yè)的事情,不用把redis當作數(shù)據(jù)庫傳統(tǒng)數(shù)據(jù)庫使用。

七、復制

通常為被復制方(master)主動將數(shù)據(jù)發(fā)送到復制方(slave),復制方接收到數(shù)據(jù)存儲在當前實例,最終目的是為了保證雙方的數(shù)據(jù)一致,同時也是降低了 master 的壓力。


13-redis數(shù)據(jù)同步.jpg

Redis 的復制方式有兩種,一種是主(master)-從(slave)模式,一種是從(slave)-從(slave)模式。


![13-redis數(shù)據(jù)同步.jpg](https://upload-images.jianshu.io/upload_images/5918960-8f1b6855d882d30d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

復制流程圖:
1、slave向master發(fā)送sync命令。
2、master開啟子進程執(zhí)行bgsave寫入rdb文件,同時將子進程接收到的寫命令緩存起來。
3、子進程寫完,父進程得知,開始將RDB文件發(fā)送給slave
4、master 發(fā)送完RDB文件,將緩存的命令發(fā)送給slave。
5、master 增量的把寫命令發(fā)送給 slave。

主從復制:

  • cp redis.conf redis2.conf
  • vim redis2.conf(slave)
  • slaveof 192.168.0.2 6379(master的地址)
  • vim redis.conf(master)
  • bind 0.0.0.0 #無 ip 都可以反問
  • ./redis-server ../redis.conf #master
  • ./redis-server ../redis2.conf #slave
    ps:是否成功 set get 請求來判斷或執(zhí)行 info 命令
    判斷是否成功:
    1、master 客戶端set值, slave 客戶端能不能獲取到。
    2、config get ‘slaveof*’
    7001 master
[root@wei-BaiDu 7001]# ./redis-cli -h 127.0.0.1 -p 7001
127.0.0.1:7001> keys *
(empty list or set)
127.0.0.1:7001> set key1  aaaa
OK

7002 slave

[root@wei-BaiDu 7002]# ./redis-cli -h 127.0.0.1 -p 7002
127.0.0.1:7002> keys *
(empty list or set)
127.0.0.1:7002> get key1
"aaaa"
127.0.0.1:7002> config get 'slaveof'
1) "slaveof"
2) "127.0.0.1 7001"
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內(nèi)容

  • 超強、超詳細Redis入門教程 轉(zhuǎn)載2017年03月04日 16:20:02 16916 轉(zhuǎn)載自: http://...
    邵云濤閱讀 17,490評論 3 313
  • 前言 在上一篇文章中,介紹了Redis內(nèi)存模型,從這篇文章開始,將依次介紹Redis高可用相關的知識——持久化、復...
    Java架構閱讀 2,346評論 3 21
  • 1.1 資料 ,最好的入門小冊子,可以先于一切文檔之前看,免費。 作者Antirez的博客,Antirez維護的R...
    JefferyLcm閱讀 17,097評論 1 51
  • 本文將從Redis的基本特性入手,通過講述Redis的數(shù)據(jù)結(jié)構和主要命令對Redis的基本能力進行直觀介紹。之后概...
    kelgon閱讀 61,221評論 23 625
  • 李公子第一次見到孫小妞,是在涂滿了個性涂鴉的公園墻角下,孫小妞乖巧地站在好朋友的旁邊。盡管還沒有介紹,李公子大概猜...
    李北方呦閱讀 803評論 0 0