前言
由于Redis的廣泛使用,加上在項目中涉及到Redis,因此會根據自己的使用和學習,寫一個Redis系列的博客,作為自己的筆記,同時也分享給大家。
What is Redis ?
看一下Redis的官網http://redis.io/對REDIS的描述:
Redis is an open source, BSD licensed, advanced?key-value cache?and?store. It is often referred to as a?data structure server?since keys can contain?strings,?hashes,?lists,?sets,sorted sets,?bitmaps?and?hyperloglogs.
關鍵詞:
Redis,開源KEY/VALUE緩存系統,數據結構服務器,數據類型。
install it and start it!
安裝redis,沒有什么特殊之處,啟動也很簡單。
如果解壓之后,沒有configure進行安裝選項的指定,直接make && makeinstall進行安裝的話,默認REDIS會安裝至/usr/local/bin下。
命令 | 說明 |
./redis-server ./redis.conf | 我們可以把安裝路徑下的redis.conf拷貝至啟動命令路徑下。用于啟動REDIS。 |
./redis-cli ./redis-cli shutdown | REDIS客戶端,可以連接和關閉redis。 |
./redis-benchmark | REDIS性能測試。 |
啟動后,觀察端口占用情況:
1 2 3 4 | [root@master?bin] #?./redis-server?./redis.conf [root@master?bin] #?netstat?-tnlp?|?grep?redis tcp????????0??????0?0.0.0.0:6379????????????????0.0.0.0:*???????????????????LISTEN??????4508 /redis-server ?*? tcp????????0??????0?:::6379?????????????????????:::*????????????????????????LISTEN??????4508 /redis-server ?* |
REDIS的默認啟動端口就是 6379。
1 2 3 4 5 6 7 | [root@master?bin] #?./redis-cli? 127.0.0.1:6379>?get?name (nil) 127.0.0.1:6379>? set ?name?zhangfengzhe OK 127.0.0.1:6379>?get?name "zhangfengzhe" |
Redis.conf
可以瀏覽下Redis的配置文件,下面是一些入門配置選項。
配置 | 說明 |
daemonize yes | 啟動redis是否以后臺的方式啟動。默認是no,那么一個XSHELL客戶端啟動REDIS后會阻塞,因此可以將配置改為yes. |
port 6379 | 啟動端口。 |
bind 192.168.1.100 | REDIS的安全特性,可以允許指定IP客戶端才能訪問REDIS SERVER! |
logfile "/usr/local/bin/resin.runlog" | 指定REDIS的運行日志 |
databases 16 | REDIS的數據是存儲在內存中的,但是也是可以持久化到數據庫中,并且REDIS將數據庫的個數默認設置為16個,默認情況下是數據庫0在使用,我們可以使用select進行切換。 |
save 900 1 | REDIS將內存中的數據保存至數據庫的策略。左邊示例就是說,900S內有一個KEY發生變化,那么STORE至DB。支持多SAVE的策略。 |
dbfilename dump.rdb dir ./ | 數據庫文件名稱及存儲路徑 |
appendonly yes appendfilename "appendonly.aof" appendfsync everysec | REDIS的AOF機制:是否記錄操作REDIS的每一個操作至AOF文件中。 |
數據類型
相比Memcached只支持String類型的KEY/VALUE而言,Redis的數據類型很豐富,比如:String/List/Set/Sorted Set/Hash等。Redis所支持的類型很多,每一種類型的命令也不少,那么我們如何記憶,學習,使用呢?
我的想法:理解REDIS每一種數據類型的特點 + 官方命令手冊
在http://redisdoc.com/?有REDIS的每一個數據類型的命令列表,以及命令的使用方法說明。
數據類型 | 說明以及一些命令 |
String | 字符串類型,也可以存儲數字,以及任何可以序列化的數據,REDIS最大上限是1GB,遠遠大于MEMCACHED的限制。 set/setnx/get/getset/mget/mset/msetnx/ ?? 【結尾是nx標示如果存在這個KEY才操作,m開頭的標示批量操作】 incr/incrby/decr/decrby 【數字的原子性的增減】 append/substr/strlen 【追加、截取、長度】 ? |
List | 本質上LIST的每一元素是STRING類型,并且LIST就是一個雙向鏈表! 可以堆棧,即先進后出;可以隊列,即先進先出。 lpush/rpush/lpop/rpop/blpop/brpop 【b開頭的標示是此命令的阻塞版本,雖然阻塞但是避免了輪詢。】 linsert 可以方便LIST進行非頭尾的插入操作 lrange/ltrim/lset/lrem 【注意0代表第一個元素,-1代表最后一個元素】 LIST沒有命令可以直接查詢是否包含這個STRING! LIST中元素是有序的,提供了lindex key index來返回下標為index的元素 |
Set | Set是String類型的無序集合,和JAVA的Set<String>特點一致。 sadd/smembers/sinter/sinterstore/sunion/sunionstore/sdiff/sdiffstore 【以store結尾的標示此命令的結果存儲至另一個SET集合中】 Set的最大特點是支持集合之間的交,并,差運算。 【這些操作很利于實現SNS需要的好友推薦,BLOG的TAG功能等】 Set還提供SISMEMBER命令來查詢SET集合是否包含這個KEY!這是LIST所不能的! 由于Set的無序性,導致取出一個元素只能利用spop/srandmember隨機取出!而sorted set解決了這一問題。 |
Sorted Set | Sorted Set的中的元素是String類型的,但是每一個String元素關聯了一個SCORE(權重,優先級),元素根據SCORE來進行排序。 zset需要注意的是,有一個排名,即rank;一個是分數,即score. |
Hash | 一個String類型的FILED/VALUE的映射表。 Hash特別適合存儲對象,占用更少的內存,而且可以很方便的存取整個對象。 hset/hmset/hget/hmget/hkeys/hvals/hgetall/hlen/hdel/hexists... |
KEY
exists key | 0 or 1? |
del key | |
type key | none/string/list/set/... |
keys pattern | 符合pattern的所有KEY |
expire key seconds | 設置KEY的過期時間 |
本文轉自zfz_linux_boy 51CTO博客,原文鏈接:http://blog.51cto.com/zhangfengzhe/1656888,如需轉載請自行聯系原作者