在Redis裏,數據庫簡單的使用一個數字編號來進行辨認,默認數據庫的數字編號是0。若是你想切換到一個不一樣的數據庫,你可使用select命令來實現。在命令行界面裏鍵入select 1,Redis應該會回覆一條OK的信息,而後命令行界面裏的提示符會變成相似redis 127.0.0.1:6379[1]>這樣。若是你想切換回默認數據庫,只要在命令行界面鍵入select 0
便可html
Redis不只僅是一種簡單的關鍵字-值型存儲,從其核心概念來看,Redis的5種數據結構中的每個都至少有一個關鍵字和一個值linux
關鍵字(Keys)是用來標識數據塊,值(Values)是關聯於關鍵字的實際值,能夠是字符串、整數、序列化對象(使用JSON、XML或其餘格式)redis
Redis命令的基本構成,如:set users:leto "{name: leto, planet: dune, likes: [spice]}"算法
關鍵字和值的是Redis的基本概念,而get和set命令是對此最簡單的使用數據庫
對於Redis而言,關鍵字就是一切,而值是沒有任何意義。Redis不容許經過值來進行查詢緩存
Redis是一種持久化的存儲器內存儲(in-memory persistent store)默認狀況下,Redis會根據已變動的關鍵字數量來進行判斷,而後在磁盤裏建立數據庫的快照(snapshot)。你能夠對此進行設置,若是X個關鍵字已變動,那麼每隔Y秒存儲數據庫一次。默認狀況下,若是1000個或更多的關鍵字已變動,Redis會每隔60秒存儲數據庫;而若是9個或更少的關鍵字已變動,Redis會每隔15分鐘存儲數據庫安全
至於存儲器,Redis會將全部數據都保留在存儲器中。顯而易見,運行Redis具備不低的成本:由於RAM仍然是最昂貴的服務器硬件部件bash
關鍵字(Keys)是用於標識一段數據的一個字符串服務器
值(Values)是一段任意的字節序列,Redis不會關注它們實質上是什麼數據結構
Redis展現了(也實現了)5種專門的數據結構
上面的幾點使得Redis快速並且容易使用,但要知道Redis並不適用於全部的應用場景
關於key
127.0.0.1:6379> set mynum "2" OK 127.0.0.1:6379> get mynum "2" 127.0.0.1:6379> incr mynum (integer) 3 127.0.0.1:6379> get mynum "3"
因爲INCR等指令自己就具備原子操做的特性,因此咱們徹底能夠利用redis的INCR、INCRBY、DECR、DECRBY等指令來實現原子計數的效果,假如,在某種場景下有3個客戶端同時讀取了mynum的值(值爲2),而後對其同時進行了加1的操做,那麼,最後mynum的值必定是5。很多網站都利用redis的這個特性來實現業務上的統計計數需求。
lists的經常使用操做包括LPUSH、RPUSH、LRANGE等。咱們能夠用LPUSH在lists的左側插入一個新元素,用RPUSH在lists的右側插入一個新元素,用LRANGE命令從lists中指定一個範圍來提取元素。
//新建一個list叫作mylist,並在列表頭部插入元素"1" 127.0.0.1:6379> lpush mylist "1" //返回當前mylist中的元素個數 (integer) 1 //在mylist右側插入元素"2" 127.0.0.1:6379> rpush mylist "2" (integer) 2 //在mylist左側插入元素"0" 127.0.0.1:6379> lpush mylist "0" (integer) 3 //列出mylist中從編號0到編號1的元素 127.0.0.1:6379> lrange mylist 0 1 1) "0" 2) "1" //列出mylist中從編號0到倒數第一個元素 127.0.0.1:6379> lrange mylist 0 -1 1) "0" 2) "1" 3) "2"
lists的應用至關普遍,隨便舉幾個例子:
redis的集合,是一種無序的集合,集合中的元素沒有前後順序。集合相關的操做也很豐富,如添加新元素、刪除已有元素、取交集、取並集、取差集等.
//向集合myset中加入一個新元素"one" 127.0.0.1:6379> sadd myset "one" (integer) 1 127.0.0.1:6379> sadd myset "two" (integer) 1 //列出集合myset中的全部元素 127.0.0.1:6379> smembers myset 1) "one" 2) "two" //判斷元素1是否在集合myset中,返回1表示存在 127.0.0.1:6379> sismember myset "one" (integer) 1 //判斷元素3是否在集合myset中,返回0表示不存在 127.0.0.1:6379> sismember myset "three" (integer) 0 //新建一個新的集合yourset 127.0.0.1:6379> sadd yourset "1" (integer) 1 127.0.0.1:6379> sadd yourset "2" (integer) 1 127.0.0.1:6379> smembers yourset 1) "1" 2) "2" //對兩個集合求並集 127.0.0.1:6379> sunion myset yourset 1) "1" 2) "one" 3) "2" 4) "two"
對於集合的使用,也有一些常見的方式,好比,QQ有一個社交功能叫作「好友標籤」。
redis還提供了有序集合(sorted sets)。有序集合中的每一個元素都關聯一個序號(score),這即是排序的依據。不少時候,咱們都將redis中的有序集合叫作zsets,這是由於在redis中,有序集合相關的操做指令都是以z開頭的,好比zrange、zadd、zrevrange、zrangebyscore等等
//新增一個有序集合myzset,並加入一個元素baidu.com,給它賦予的序號是1:
127.0.0.1:6379> zadd myzset 1 baidu.com
(integer) 1 //向myzset中新增一個元素360.com,賦予它的序號是3 127.0.0.1:6379> zadd myzset 3 360.com (integer) 1 //向myzset中新增一個元素google.com,賦予它的序號是2 127.0.0.1:6379> zadd myzset 2 google.com (integer) 1 //列出myzset的全部元素,同時列出其序號,能夠看出myzset已是有序的了。 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "baidu.com" 2) "1" 3) "google.com" 4) "2" 5) "360.com" 6) "3" //只列出myzset的元素 127.0.0.1:6379> zrange myzset 0 -1 1) "baidu.com" 2) "google.com" 3) "360.com"
hashes存的是字符串和字符串值之間的映射,好比一個用戶要存儲其全名、姓氏、年齡等等,就很適合使用哈希
//創建哈希,並賦值
127.0.0.1:6379> HMSET user username antirez password P1pp0 age 34
OK
//列出哈希的內容
127.0.0.1:6379> HGETALL user
1) "username" 2) "antirez" 3) "password" 4) "P1pp0" 5) "age" 6) "34" //更改哈希中的某一個值 127.0.0.1:6379> HSET user password 12345 (integer) 0 //再次列出哈希的內容 127.0.0.1:6379> HGETALL user 1) "username" 2) "antirez" 3) "password" 4) "12345" 5) "age" 6) "34"
持久化不屬於入門範圍,找了幾篇比較好的文章,有興趣歡迎閱讀
redis.conf 配置項說明以下:
daemonize no
/var/run/redis.pid
文件,能夠經過pidfile指定pidfile /var/run/redis.pid
6379
,這裏有個故事,由於6379在手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字port 6379
bind 127.0.0.1
timeout 30
loglevel verbose
/dev/null
logfile stdout
databases 16
save <seconds> <changes>
rdbcompression yes
dbfilename dump.rdb
指定本地數據庫存放目錄
`dir ./`
設置當本機爲slav服務時,設置master服務的IP地址及端口,在Redis啓動時,它會自動從master進行數據同步
`slaveof <masterip> <masterport>`
當master服務設置了密碼保護時,slav服務鏈接master的密碼
`masterauth <master-password>`
設置Redis鏈接密碼,若是配置了鏈接密碼,客戶端在鏈接Redis時須要經過AUTH <password>命令提供密碼,默認關閉
`requirepass foobared`
maxclients 128
指定Redis最大內存限制,Redis在啓動時會把數據加載到內存中,達到最大內存後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理後,仍然到達最大內存設置,將沒法再進行寫入操做,但仍然能夠進行讀取操做。Redis新的vm機制,會把Key存放內存,Value會存放在swap區
`maxmemory <bytes>`
appendonly no
appendfilename appendonly.aof
指定更新日誌條件,共有3個可選值:
no:表示等操做系統進行數據緩存同步到磁盤(快)
always:表示每次更新操做後手動調用fsync()將數據寫到磁盤(慢,安全)
everysec:表示每秒同步一次(折衷,默認值)
appendfsync everysec
vm-enabled no
vm-swap-file /tmp/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
glueoutputbuf yes
activerehashing yes
include /path/to/local.conf
MULTI、EXEC、DISCARD、WATCH指令構成了redis事務處理的基礎
MULTI用來組裝一個事務;
EXEC用來執行一個事務;
DISCARD用來取消一個事務;
WATCH用來監視一些key,一旦這些key在事務執行以前被改變,則取消事務的執行。