初識redis(redis基礎命令)


redis簡介
redis是一個開源(BSD許可)的使用C語言編寫、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,它可以用作數據庫、緩存和消息中間件,並提供多種語言的API。從2010年3月15日起,redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。

redis是一個key-value存儲系統。它支持存儲的value類型包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

1、安裝redis

1.1使用yum進行安裝,這里使用的是yum源,關於如何安裝yum倉庫請參考我的https://www.cnblogs.com/caesar-id/p/10821105.html

查看阿里源的redis版本 

[root@localhost ~]# yum list redis

使用yum安裝redis,安裝過程非常簡單

[root@localhost ~]# yum install redis -y

1.2使用源碼安裝redis

我們使用yum安裝的redis版本是3.2.12,但是截至當前redis版本已經是redis-5.0.4。這里我們就使用最新的版本進行源碼安裝。

如果你已經使用yum進行了安裝,現在想使用最新版本的redis,你最好卸載當前的redis。以免造成不必要的麻煩。

[root@localhost ~]# yum remove redis -y  // 卸載yum安裝的redis

1.2.1下載redis源碼包

[root@localhost ~]# wget -P /opt/source/ http://download.redis.io/releases/redis-5.0.4.tar.gz

 1.2.2解包

[root@localhost ~]# tar -zxvf /opt/source/redis-5.0.4.tar.gz -C /opt/

 1.2.3安裝

[root@localhost ~]# cd /opt/redis-5.0.4/
[root@localhost redis-5.0.4]# make && make install  //默認在/usr/local/bin所以就不用我們設置環境變量了

 安裝后查看redis都有哪些可執行文件

[root@localhost ~]# ls /usr/local/bin/redis-*
/usr/local/bin/redis-benchmark    // 用於進行redis性能測試的工具
/usr/local/bin/redis-cli          // redis的客戶端
/usr/local/bin/redis-check-aof    // 用於修復出問題的AOF文件
/usr/local/bin/redis-sentinel     // 用於集群管理
/usr/local/bin/redis-check-rdb    // 用於修復出問題的dump.rdb文件
/usr/local/bin/redis-server       // redis的服務端

 1.3了解redis服務的配置文件

redis-server 可以指定配置文件來啟動服務,這里在redis的安裝目錄下有個redis.conf模板,我們查看下模板中都有哪些配置

[root@localhost ~]# cat /opt/redis-5.0.4/redis.conf | grep -v "^#" | grep -v "^$   // 過濾掉注釋和空行
bind 127.0.0.1   // 綁定服務器IP地址,多個使用空格進行分隔,如果不指定bind默認監聽本機所有可用的網絡接口
protected-mode yes  // 服務器的安全模式
port 6379    // 服務器的端口號
tcp-backlog 511   // TCP連接中已完成隊列(完成三次握手之后)的長度
timeout 0  // 客戶端空閑n秒后關閉連接(0表示不主動關閉連接)
tcp-keepalive 300   // TCP長連接單位秒(300秒沒有活動關閉連接)
daemonize no  // 守護進程建議使用yes啟用守護進程,如果是no會阻塞shell窗口
supervised no   // 可以通過upstart和systemd管理Redis守護進程,這個參數是和具體的操作系統相關的
pidfile /var/run/redis_6379.pid
loglevel notice    // 日志級別。可選項有:debug(記錄大量日志信息,適用於開發、測試階段);  verbose(較多日志信息);  notice(適量日志信息,使用於生產環境);warning(僅有部分重要、關鍵信息才會被記錄)。
logfile ""  // 日志文件的位置,當指定為空字符串時,為標准輸出,如果redis已守護進程模式運行,那么日志將會輸出到  /dev/null 。
databases 16   // 設置數據庫的數目
always-show-logo yes
save 900 1    // 保存數據到磁盤。格式是:save <seconds> <changes> ,含義是在 seconds 秒之后至少有 changes個keys 發生改變則保存一次
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes  // 默認情況下,如果 redis 最后一次的后台保存失敗,redis 將停止接受寫操作,這樣以一種強硬的方式讓用戶知道數據不能正確的持久化到磁盤, 否則就會沒人注意到災難的發生。 如果后台保存進程重新啟動工作了,redis 也將自動的允許寫操作。然而你要是安裝了靠譜的監控,你可能不希望 redis 這樣做,那你就改成 no 好了。

rdbcompression yes  // 是否在dump  .rdb數據庫的時候壓縮字符串,默認設置為yes。如果你想節約一些cpu資源的話,可以把它設置為no,這樣的話數據集就可能會比較大
rdbchecksum yes  // 是否CRC64校驗rdb文件,會有一定的性能損失(大概10%)。
dbfilename dump.rdb   // dump 的reb文件名字
dir ./  // 數據庫的工作目錄
replica-serve-stale-data yes  //#當副本失去與主服務器的連接時或當復制仍在進行中,副本可以以兩種不同的方式進行操作:1)如果副本服務過時數據設置為“是”(默認值),則副本將仍然答復客戶端請求,可能包含過期數據,或者如果這是第一次同步,則數據集可能為空。

// 2)如果副本服務過時數據設置為“否”,則副本將使用對所有類型的命令執行“與正在進行的主控形狀同步”錯誤。但是,對於信息、復制、AUTH、ping、關機、復制、角色、配置,訂閱,取消訂閱,psubscribe,punsubscribe,publish,pubsub,命令、發布、主機:和延遲。
replica-read-only yes   // 設置slave是否是只讀的。從2.6版起,slave默認是只讀的
repl-diskless-sync no   // 主從數據復制是否使用無硬盤復制功能。
repl-diskless-sync-delay 5  // 當啟用無盤復制時,可以配置延遲。服務器等待,以便生成通過套接字傳輸RDB的子節點。復制品。這一點很重要,因為一旦轉移開始,就不可能服務新的副本到達,將排隊等待下一次RDB傳輸,因此服務器等待一段時間,以便讓更多的副本到達。延遲以秒為單位指定,默認為5秒。禁用它完全設置為0秒,傳輸將盡快開始。
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

 

關於redis的優化,不在本文討論范圍內,下面我們手動創建一個配置文件來運行redis服務

1.4使用系統默認的配置文件登陸redis

[root@localhost ~]# redis-server 

開啟后你會看到如下界面,shell被redis給阻塞住了。

新開一個shell,登陸redis

1.5創建自定義的redis配置文件

[root@localhost ~]# vim /opt/redis-5.0.4/myself.conf 
bind 192.168.10.10    // 綁定IP地址
protected-mode yes    // 開啟安全模式
port 9000             // 指定服務器端口
daemonize yes         // 開啟守護進程
requirepass 123.com   // 登陸密碼

 1.5.1使用我們自定義的redis配置文件登陸redis服務器

[root@localhost ~]# vim /opt/redis-5.0.4/myself.conf   // 指定配置文件開啟服務

 使用客戶端登陸(這里需要注意,如果是在當前shell開啟的redis服務,這里就必須使用絕對路徑來使用客戶端。如果是新開一個shell就不會有這樣的問題

[root@localhost ~]# /usr/local/bin/redis-cli -p 9000 -h 192.168.10.10  

 至此redis服務的啟動,和登陸就到這里吧,下面我們來看一下redis的數據結構。

 


 

2.redis的數據結構

redis是一種高級的key:value存儲系統,其中value支持五種數據類型
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)

如果對Python有所了解相信對上面的數據類型並不會陌生。

2.1字符串string的常用命令

set    // 設置key
get     // 獲取key
append  // 追加string
mset    // 設置多個鍵值對
mget    // 獲取多個鍵值對
del     // 刪除key
incr    // 遞增+1
decr    // 遞減-1

2.2list類型的常用命令

lpush           // 從列表左邊插
rpush           // 從列表右邊插
lrange          // 獲取一定長度的元素  lrange key  start stop
ltrim           // 截取一定長度列表
lpop            // 刪除最左邊一個元素
rpop            // 刪除最右邊一個元素
lpushx/rpushx   // key存在則添加值,不存在不處理

2.3set類型的常用命令

sadd        // 添加元素
srem        // 刪除元素
sismember   // 判斷是否為set的一個元素
smembers    // 返回集合所有的成員
sdiff       // 返回一個集合和其他集合的差異
sinter      // 返回幾個集合的交集
sunion      // 返回幾個集合的並集

2.4有序集合常用命令

ZADD         // 添加有序集合
ZREM         // 刪除有序集合中的元素
ZREVRANGE    // 倒敘
ZRANGE       // 正序
ZCARD        // 有序集合的基數
ZSCORE       // 返回成員的值
ZRANK        // 返回有序集合中成員的排名

2.5哈希數據結構

hset       // 設置散列值
hget       // 獲取散列值
hmset      // 設置多對散列值
hmget      // 獲取多對散列值
hsetnx     // 如果散列已經存在,則不設置(防止覆蓋key)
hkeys      // 返回所有keys
hvals      // 返回所有values
hlen       // 返回散列包含域(field)的數量
hdel       // 刪除散列指定的域(field)
hexists    // 判斷是否存在

2.6redis的基礎命令

keys *        // 查看所有key
type key      // 查看key類型
ttl key       // 查看key過期剩余時間-1表示存在,-2表示key已經不存在了
persist       // 取消key的過期時間-1表示key存在,沒有過期時間
exists key    // 判斷key存在存在返回1否則0
del keys      // 刪除key可以刪除多個
dbsize        // 計算key的數量
expire key seconds    // 過期時間

好吧redis先簡單介紹到這里吧。。。。。。。。。

小結:

  • redis是一種內存型的nosql數據庫,因此讀寫性能特別快,通常用來做數據的緩存。
  • redis存儲數據的方法是以key-value的形式。
  • redis的key通常都是字符串。
  • redis的value類型支持字符串、列表、哈希、等多種類型。
  • redis可以使用rdb和aof做數據的持久化存儲,並且支持事物以及多實例等。
  • redis由於是內存型數據庫,所以存儲數據的大小受機器內存的影響。

 


免責聲明!

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



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