redis 學習筆記1(安裝以及控制台命令)


為什么要學習這個?

分布式技術必會,得益於redis的設計理念,內存數據庫,epoll(多路復用)模型,單線程模型除去了鎖和上下文切換,提高了性能.單線程保證執行順序(輪詢),在分布式環境下對於數據的一致性和唯一性應該是經常需要考慮到的.

簡單入門:

1.數據結構:(特性對比java 集合)

  1. 字符類型(string)
  2. 散列類型(hash)
  3. 列表類型(list 雙向鏈表)
  4. 集合類型(set)
  5. 有序集合(zset)

2.功能:

  1. 可以為每個key設置超時時間;
  2. 可以通過列表類型來實現分布式隊列的操作
  3. 支持發布訂閱的消息模式

3.存儲

默認支持16個數據庫;可以理解為一個命名空間

跟關系型數據庫不一樣的點

  1. redis不支持自定義數據庫名詞
  2. 每個數據庫不能單獨設置授權
  3. 每個數據庫之間並不是完全隔離的。 可以通過flushall命令清空redis實例面的所有數據庫中的數據

通過  select dbid 去選擇不同的數據庫命名空間 dbid的取值范圍默認是0 -15

4.key 最大521M

 ===================================================================

 實戰  使用: 環境  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) 方式從小到大

 

 

redis的事務處理

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM