爲何要學習這個?html
分佈式技術必會,得益於redis的設計理念,內存數據庫,epoll(多路複用)模型,單線程模型除去了鎖和上下文切換,提升了性能.單線程保證執行順序(輪詢),在分佈式環境下對於數據的一致性和惟一性應該是常常須要考慮到的.java
簡單入門:linux
1.數據結構:(特性對比java 集合)redis
2.功能:數據庫
3.存儲centos
默認支持16個數據庫;能夠理解爲一個命名空間服務器
跟關係型數據庫不同的點數據結構
經過 select dbid 去選擇不一樣的數據庫命名空間 。 dbid的取值範圍默認是0 -15app
4.key 最大521Mdom
===================================================================
實戰 使用: 環境 centos7.0 redis4.0.10
安裝
1.下載https://redis.io/download
2.解壓 tar -zxvf 安裝包
3.cd redis-4.0.10
4.執行make
(若是出現 *** [adlist.o] Error 127 ,先安裝gcc 命令是:yum install gcc)
(若是出現zmalloc.h:50:31: 致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄 執行命令:make MALLOC=libc)
4.1 make test (建議預先編譯查看有沒有問題)
(若是出現錯誤You need tcl 8.5 or newer in order to run the Redis test ,
參考:https://blog.csdn.net/luyee2010/article/details/18766911 )
4.2 make install [PREFIX=/path]完成安裝(指定安裝到什麼目錄)
5(bin).啓動 /redis-server ../redis.conf 後臺運行
之後臺進程的方式啓動,修改redis.conf daemonize =yes
6客戶端鏈接 (修改配置 redis.conf bind 0.0.0.0)
./redis-cli -h 127.0.0.1 -p 6379
7.bin 目錄下的其餘命令
Redis-server 啓動服務
Redis-cli 訪問到redis的控制檯
redis-benchmark 性能測試的工具
redis-check-aof aof文件進行檢測的工具
redis-check-dump rdb文件檢查工具
redis-sentinel sentinel 服務器配置
==================================================================
通用命令,根據key 作相關增刪改查以及設置key的失效時間 (http://www.redis.net.cn/order/3531.html)
賦值和取值
SET key value
setnx (用來作分佈式鎖)
GET key
遞增數字(原子遞增,默認爲加1)
incr key
incrby key increment 遞增指定的整數 eg: incrby shuaige 10
decr key 原子遞減
append key value 向指定的key追加字符串
strlen key 得到key對應的value的長度
mget key key.. 同時得到多個key的value
mset key value key value key value …
setnx
list, 能夠存儲一個有序的字符串列表
LPUSH/RPUSH: 從左邊或者右邊push數據
LPUSH/RPUSH key value value …
llen num 得到列表的長度
lrange key start stop ; 索引能夠是負數, -1表示最右邊的第一個元素
lrem key count value
lset key index value
LPOP/RPOP : 取數據
應用場景:能夠用來作分佈式消息隊列
不支持數據類型的嵌套(valu 是其餘數據類型,好比list )
hset key field value
hget key filed
hmset key filed value [filed value …] 一次性設置多個值
hmget key field field … 一次性得到多個值
hgetall key 得到hash的全部信息,包括key和value
hexists key field 判斷字段是否存在。 存在返回1. 不存在返回0
hincryby
hsetnx
hdel key field [field …] 刪除一個或者多個字段
set 跟list 不同的點。 集合類型不能存在重複的數據。並且是無序的
sadd key member [member ...] 增長數據; 若是value已經存在,則會忽略存在的值,而且返回成功加入的元素的數量
srem key member 刪除元素
smembers key 得到全部數據
sdiff key key … 對多個集合執行差集運算
sunion 對多個集合執行並集操做, 同時存在在兩個集合裏的全部值
zadd key score member
zrange key start stop [withscores] 去得到元素。 withscores是能夠得到元素的分數
若是兩個元素的score是相同的話,那麼根據(0<9<A<Z<a<z) 方式從小到大
MULTI 去開啓事務
EXEC 去執行事務(注意,雖然開啓了事務,可是若是執行的過程有問題的話,不會回滾!) 圖中,先hset persin name tom (persin是hash類型,開啓事務 用zadd persin jinjian 確定報錯,可是查詢 get kkk 依然能夠獲得值)
expire key seconds
ttl 得到key的過時時間
publish channel message
subscribe channel [ …]
數據淘汰策略
redis 內存數據集大小上升到必定大小的時候,就會施行數據淘汰策略。redis 提供 6種數據淘汰策略:
volatile-lru:從已設置過時時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過時時間的數據集(server.db[i].expires)中挑選將要過時的數據淘汰
volatile-random:從已設置過時時間的數據集(server.db[i].expires)中任意選擇數據淘汰
allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
no-enviction(驅逐):禁止驅逐數據
數據儲存方式格式
AOF和RDB
RDB 表示實時存儲,AOF只記錄執行的語句,啓動的時候執行語句
默認RDB
#補充相關linux命令:
檢測後臺進程是否存在 ps -ef |grep redis
檢測6379端口是否在監聽 netstat -lntp | grep 6379
# redis 監控工具
redis-stat