安裝 www.redis.io
下載安裝包
tar zxvf redis.tar.gz
cd redis
make
cd src && make install
移動文件,便於管理:
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
mv /redis/redis.conf /usr/local/redis/etc
mv /redis/src下面命令到 /usr/local/redis/binphp
一.數據類型 [終端命令行下操做]
1.String類型
1).介紹:包含任何的數據,好比圖片或序列化的對象.
2).set 設置key對應的值爲string類型的value
例:
set name value
3).get 獲取設置的值
get namegit
4).setnx key存在,返回0,則設置不成功
setnx name valuegithub
5).setex 指定key的有效期 單位爲秒
setex name 10 redredis
6).setrange 設置指定key的value值的子字符串
get name 獲得 aaa@126.com
從第4個字符串開始替換,替換的字符串沒有原的長,將會保留原有大於長於的字符串
setrange name 4 gmail.com
get name 獲得 aaa@gmail.com數據庫
7).mset 一次設置多個key的值
mset k1 v1 k2 v2 k3 v3數組
8).msetnx 一次設置多個key的值,一個key沒有設置成功,將所有設置不成功,存在將不會設置即爲0[false]
msetnx k1 v1 k2 v2 k3 v3緩存
9).getset 設置key的值,並返回key的舊值
getset key 30 獲得 20就是原來的值,並設置瞭如今key爲30安全
10).getrange 獲取key的值子字符串
從第0個字符到第5個字符返回
getrange key 0 5服務器
11).mget 批量獲取
mget k1 k2 k3 k4 k5app
12).incr 遞增 對key的值作加加操做,並返回新的值
incr key
13).incrby 同incr相似,加指定的值,key不存在的時候會設置key,並認爲原來的值爲0
incrby key 2 讓key自增2
incrby key -3 也能夠設置爲負數,就是自減 些例爲自減3
14).decr 自減
decr key
15).decrby 自減指定的值
decrby key 2 自減2
decrby key -2 自增2
16).append 給指定key的字符串追加value,返回新字符串的值的長度
append key @126.com
17).strlen 取得值的長度
strlen key
2.hashes類型
1).介紹
hash是一個string類型的field和value的映射表.特別適用於存儲對象.
2).hset 設置hash field爲指定的值,如key不存在則先建立
hset user:001 name zhangsan 能夠將user:001當作一個表 name爲一個表的一個字段
hget user:001 name 獲得 zhangsan
3).hsetnx 存在返回0
hsetnx user:001 name zhangsan 返回 1
再設置user:001 name設置就會返回 0
4).hmset 同時設置hash的多個field
hmset user:001 name zhangsan age 20 sex 1
5).hget 獲取
hget user:001 name
6).hmget 批量返回
hmget user:001 name age sex
7).hincrby 對某個key自增指定的數
hincrby user:001 age 5 自增爲5
8).hexists 檢查是否存在,存在爲1 不然爲0
hexists user:001 name
9).hlen 指定hash的field的數量
hlen user:001
10).hdel 刪除指定hash的field的字段
hdel user:001 age 刪除age字段
11).hkeys 返回hash中全部的字段
hkeys user:001 返回user:001表中的全部字段
12).hvals 返回hash全部的value
hvals user:001 返回表中全部對應鍵的對應值
13).hgetall 獲取某個hash中所有的field及value
hgetall user:001
3.lists類型
1).介紹
List是一個鏈表結構,主要功能是push,pop獲取一個範圍的全部值.操做中key理解爲鏈表的名字. list既能夠做爲棧,也能夠做爲隊列. 相似於PHP的數組
棧:相似於試管,後進先出,先進後出
隊列:類心於管道,先進先出
2).lpush 從頭部添加字符串元素
lpush mylist world
lpush mylist hello
lrange mylist 0 -1 得 hello world 前後後出
3).rpush 從尾部添加字符串元素
rpush mylist world
rpush mylist hello
lrange mylist 0 -1 得 world hello 先進先出
4).linsert 在key對應list的特定的位置前或後添加字符串
lpush li1 "one"
lpush li1 "two"
lrange li1 0 -1
linsert li1 before one three
lrange li1 0 -1 得 two three one
5).lset 指定下標的元素替換掉
lset li1 1 four 把li1中下標爲1的更改成four
6).lrem 從key對應的list中刪除n個和value相同的元素(n<0從尾刪除,n=0所有刪除)
lrem li1 3 "one" 刪除3個和one相關的元素
7).ltrim 保留指定key的值範圍內的數據
lpush li1 "one"
lpush li1 "two"
lpush li1 "three"
lpush li1 "four"
ltrim li1 1 2 two three
ltrim li1 1 -1 two three four
8).lpop 從頭部刪除元素
lpop li1
9).rpop 從尾部刪除元素
10).rpoplpush 從第一個list的尾部移除元素,並添加到第二個list的頭部
rpoplpush mylist1 mylist2
11)lindex 返回名稱爲key的list中index位置的元素
lindex li1 0 獲得 three 0表明元素的索引
12).llen 返回list的多個元素 至關於PHP中的count()
llen list1 返回個數
4.sets類型
1).介紹
set是集合,它是string類型的無序集合. set是經過hash table實現的增刪改查.對集合咱們能夠了並集,交集,差集.經過這些操做,咱們能夠實現sns中的好友推薦和blog的tag功能
2).sadd 向名稱爲key的set中添加元素
sadd myset one 返回1
sadd myset two 返回1
sadd myset one 返回0
smembers myset 查看元素
3).srem 刪除key中set中的元素
sadd myset one
sadd myset two
srem myset one 刪除成功返回1
smembers myset
4).spop 隨機返回並刪除名稱爲key的set中一個元素
sadd myset one
sadd myset two
spop myset
5).sdiff 返回全部給定key與第一個key的差集
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sdiff myset1 myset2 返回 one
sdiff myset2 myset1 返回 three 注:set誰在前返回前面不一樣的值
6).sdiffstore 返回全部給定key與第一個key的差集,並將結果存爲另外一個set中
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sdiff myset3 myset1 myset2 將差集存儲到myset3中
7).sinter 返回所用給定的key的交集
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sinter myset1 myset2 得 two
8).sinterstore 返回所用給定的key的交集並存儲到另外一個集合中
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sinterstore myset3 myset1 myset2 存到myset3集合中 two
9).sunion 並集
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sunion myset1 myset2 得 one two three
10).sunionstore 並集並存儲
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sunion myset3 myset1 myset2 存myset3集合中 得 one two three
11).smove 從第一個key對應的set中移除並添加到第二個對應的set中
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
smove myset1 myset3 one 將myset1中的one移到myset8中
12).scard 返回名稱爲key的set的元素個數
scard myset1
13).sismember 測試某個元素是不是名稱爲key的集合的元素 相似php中的in_array()
sadd myset1 one
sadd myset1 two
sismember myset1 one 有返回1 無爲0
14).srandmemeber 隨機返回名稱爲key的集合的一個元素,但不刪除元素
sadd myset1 one
sadd myset1 two
srandmemeber myset1
5.sorted sets類型
1).介紹
是set一個升級版本,有序集合,有順序
2).zadd 添加
zadd zset1 1 one 數定爲索引
zadd zset1 2 two
zadd zset1 3 one
zrange zset1 0 -1 withscores 後面數字索引
3).zrem 刪除名爲key的zset中的元素
zrem zset1 two
4).zincrby 對順序號進行增大和減少
zincrby zset1 2 one
zrange zset1 0 -1 withscores
zincrby zset1 -2 one
zrange zset1 0 -1 withscores
5).zrank 返回名稱爲key的zset中元素的排名,下標從小到大排序
zrank zset1 two
6).zrevrank 降序排 在找索引 和zrank倒個
zrevrank zset1 two
7).zrangebyscore 返回集合中下標在給定區間的元素 按順序刪除
zrangebyscore myset1 2 3 withscores 2和3是下標
8).zcount 返回集合中下標在給定區間的數量
zcount zset1 2 4
9).zcard 返回集合中元素個數
zcard zset1
10).zremrangebyrank 刪除集合中排名在給定區間的元素
zremrangebyrank zset 1 1 只刪除索引1
二.Redis經常使用命令
1).keys 返回知足給定pattern的全部key
keys *
2).exists 確認一個key是否存在
exists name 存在返回1,不然0
3).del 刪除一個key
del age 刪除age鍵
3).expire 設置一個key的過時時間 單位 秒
expire age 10 給age鍵設置10秒過時
ttl age 來獲取這個key的有效時長
4).select 選擇數據庫
select 0 進行0數據庫
set age 30
get age
move age 1 從0數據庫中把age移到1數據庫中
select 1
get age
5).persist 移除給定key的過時時間
expire age 100
ttl age
persist age 取消age的過時時間
6).randomkey 隨機返回key空間的一個key
randomkey
7).rename 重命名key
rename age age2 把age重命名爲age2
8).type 返回值的類型
type age
---------------- 服務器相關命令
9).ping 測試鏈接是否存活
ping 通了就返回PONG
10).echo 在命令行打印一此內容
echo aaa
11).quit 退出鏈接
12).dbsize 返回當前數據庫中key的數目
dbsize
13).info 獲取服務器的相關信息
info
14).config get 實時傳儲收到的請求
config get
config get timeout
15).flushdb 刪除當前選擇數據庫中的全部key
flushdb
dbsize
16).flushall 刪除全部數據庫中的全部key
flushall
dbsize
三.Redis高級應用
1).安全性
在配置文件中修改
requirepass 密碼
vi /etc/redis/etc/redis.conf
requirepass test 這個test就是密碼
pkill redis-server 關閉
/bin/redis-server /etc/redis/etc/redis.conf 啓動
這樣就生效了
在進入後受權
auth test 就能夠
在登錄的時候就指定密碼
redis-cli -a test
2.主從複製
配置主從服務器:
只須要在slave的配置文件中加入如下配置
slaveof 192.168.1.100 6379 #指定master的ip和端口
masterauth test #test主機的密碼
四.事務處理
get age
multi
set age 10
set age 20
exec
get age
取消一個事務
get age
multi
set age 10
set age 20
discard #取消一個事務
樂觀鎖
watch age 監聽age鍵
五.持久化機制
1.snapshotting(快照)也是默認方式,默認文件名爲dump.rdb
2.Append-only file(縮寫aof)的方式.
snapshotting方式
配置redis在n秒內若是超過m個key修改就自動作快照
save 900 1 # 900秒內若是超過1個key被修改,則發起快照保存
save 300 10 #300秒內若是超過10個key被修改,則發起快照保存
save 6000 100
aof方式
redis會將每個收到的定命令都經過write函數追加到文件中,當redis重啓時會經過從新執行文件中保存的寫命令來在內存中重建整個數據庫的內容.固然因爲os會在內核中緩存write作的修改,因此可能不是當即寫到磁盤上.能夠經過配置文件告訴redis咱們想要經過fsync函數強制os寫入到磁盤的時機
appendonly yes #啓用aof持久化方式
#appendfsync always # 收到寫命令就當即寫入磁盤,最慢,可是保證安全的持久化
appendfsync everysec # 第秒鐘寫入磁盤一次.在性能和持久化方面作了很好的折中
#appendfsync no # 徹底依賴os,性能最好,持久化沒保證
六.發佈及訂閱消息
發佈:publish
訂閱:subscribe和psubscribe
subscribe tv1 監聽了tv1就這個頻道 能夠同事訂閱多個頻道 subscribe tv1 tv2
發佈
publish tv1 nihao
七.虛擬內存的使用
把不常常訪問的數據交換到磁盤上
配置文件中的相關配置
要加上這句: really-use-vm yes
vm-enabled yes # 開啓vm功能
vm-swap-file /tmp/redis.swap #交換出來的value保存的文件路徑
vm-max-memory 1000000 # redis使用的最大內存上限
vm-page-size 32 # 每一個頁面的大小32字節
vm-pages 1123343334 # 最多使用多少頁面
vm-max-threads 4 # 用於執行value對象換入的工做線程數量
八.和PHP結合1.打模塊 打官網中下載 https://github.com/nicolasff/phpredis/archive/master.ziptar zxvf phpredis.tar.gzcd phpredis/usr/lcoal/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmake && make install修改PHP配置文件加上以模塊extension=redis.so