Redis介紹、安裝部署、操作


學習連接:http://www.runoob.com/redis/redis-tutorial.html

一、Redis介紹

  Redis是NoSql的一種。

  NoSql,全名:Not Only Sql,是一種非關系型數據庫,它不能替代關系弄數據庫,只是關系型數據庫的一個補充,是可以解決高並發、高可用、高擴展、大數據存儲等一系列問題而產生的數據庫解決方案。

NoSql有以下4種分類:鍵值(Key-Value)存儲數據庫、列存儲數據庫、文檔型數據庫、圖形(Graph)數據庫。而Redis屬於第一種:鍵值(Key-Value)存儲數據庫。

  Redis是使用c語言開發的一個高性能鍵值數據庫,即通過一些鍵值類型來存儲數據。Redis支持的鍵值類型有:String字符類型、map散列類型、list列表類型、set集合類型、sortedset有序集合類型。

redis的應用場景如下:
  緩存(數據查詢、短連接、新聞內容、商品內容等等)、分布式集群架構中的session分離、聊天室的在線好友列表、任務隊列。

  (秒殺、搶購、12306等等)、應用排行榜、網站訪問統計、數據過期處理(可以精確到毫秒)。

  作為緩存的應用場景是最多的。
   
Redis優點:

  異常快速 : Redis是非常快的,每秒可以執行大約110000設置操作,81000個/每秒的讀取操作。
  支持豐富的數據類型 : Redis支持最大多數開發人員已經知道如列表,集合,可排序集合,哈希等數據類型。
  這使得在應用中很容易解決的各種問題,因為我們知道哪些問題處理使用哪種數據類型更好解決。
  操作都是原子的 : 所有 Redis 的操作都是原子,從而確保當兩個客戶同時訪問 Redis 服務器得到的是更新后的值(最新值)。
  MultiUtility工具:Redis是一個多功能實用工具,可以在很多如:緩存,消息傳遞隊列中使用(Redis原生支持發布
/訂閱),在應用程序中,如:Web應用程序會話,網站頁面點擊數等任何短暫的數據;

 

二、Redis基本知識
1、Redis的數據類型:
  字符串、列表(lists)、集合(sets)、有序集合(sorts sets)、哈希表(hashs)
2、Redis和memcache相比的獨特之處:   (1)redis可以用來做存儲(storge)、而memcache是來做緩存(cache)。這個特點主要是因為其有“持久化”功能   (2)存儲的數據有“結構”,對於memcache來說,存儲的數據,只有一種類型——“字符串”,而redis則可以存儲字符串、鏈表、集合、有序集合、哈序結構
3、持久化的兩種方式:   Redis將數據存儲於內存中,或被配置為使用虛擬內存。   實現數據持久化的兩種方式:(1)使用截圖的方式,將內存中的數據不斷寫入磁盤(性能高,但可能會引起一定程度的數據丟失)                (2)使用類似mysql的方式,記錄每次更新的日志
4、Redis的主從同步:對提高讀取性能非常有益
5、Redis服務端的默認端口是6379

   

三、redis安裝部署

一般redis安裝於linux服務器,我這里是Linux下的安裝,也支持window或mac,請自行百度安裝方法。

我這里使用的Linux系統是CentOS release 6.5。

1、Redis下載

  可以到redis的官網找到各個Redis版本的下載地址,如:http://download.redis.io/releases      https://redis.io/download

  我這里用的是:redis-5.0.2.tar.gz 

  上傳、解壓過程略

  我的路經:/opt/redis/redis-5.0.2

2、編譯安裝Redis

  進入redis源碼:
  cd  /opt/redis/redis-5.0.2  

[root@centos04 redis-5.0.2]# ll
total 248
-rw-rw-r--.  1 root root 85327 Nov 22 18:26 00-RELEASENOTES
-rw-rw-r--.  1 root root    53 Nov 22 18:26 BUGS
-rw-rw-r--.  1 root root  1894 Nov 22 18:26 CONTRIBUTING
-rw-rw-r--.  1 root root  1487 Nov 22 18:26 COPYING
drwxrwxr-x.  6 root root  4096 Nov 22 18:26 deps
-rw-rw-r--.  1 root root    11 Nov 22 18:26 INSTALL
-rw-rw-r--.  1 root root   151 Nov 22 18:26 Makefile
-rw-rw-r--.  1 root root  4223 Nov 22 18:26 MANIFESTO
-rw-rw-r--.  1 root root 20555 Nov 22 18:26 README.md
-rw-rw-r--.  1 root root 62155 Nov 22 18:26 redis.conf
-rwxrwxr-x.  1 root root   275 Nov 22 18:26 runtest
-rwxrwxr-x.  1 root root   280 Nov 22 18:26 runtest-cluster
-rwxrwxr-x.  1 root root   281 Nov 22 18:26 runtest-sentinel
-rw-rw-r--.  1 root root  9710 Nov 22 18:26 sentinel.conf
drwxrwxr-x.  3 root root  4096 Nov 22 18:26 src
drwxrwxr-x. 10 root root  4096 Nov 22 18:26 tests
drwxrwxr-x.  8 root root  4096 Nov 22 18:26 utils
[root@centos04 redis-5.0.2]# 

  使用make命令編譯Redis需要c語言環境,CentOS自帶c語言環境,若是使用其他Linux系統中沒有c語言環境,則需要安裝。

[root@centos04 redis-5.0.2]# make
cd src && make all
make[1]: Entering directory `/opt/redis/redis-5.0.2/src'
    CC Makefile.dep
make[1]: Leaving directory `/opt/redis/redis-5.0.2/src'
make[1]: Entering directory `/opt/redis/redis-5.0.2/src'
rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html Makefile.dep dict-benchmark
(cd ../deps && make distclean)
make[2]: Entering directory `/opt/redis/redis-5.0.2/deps'
(cd hiredis && make clean) > /dev/null || true
(cd linenoise && make clean) > /dev/null || true
(cd lua && make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true
(rm -f .make-*)
make[2]: Leaving directory `/opt/redis/redis-5.0.2/deps'
(rm -f .make-*)
......(略)
...... (略)
Hint: It's a good idea to run 'make test' ;)
 
make[1]: Leaving directory `/opt/redis/redis-5.0.2/src'
[root@centos04 redis-5.0.2]# 

  編譯過后,就是安裝了,安裝Redis的命令如下:
  make install PREFIX=/opt/redis  

[root@centos04 redis-5.0.2]# make install PREFIX=/opt/redis
cd src && make install
make[1]: Entering directory `/opt/redis/redis-5.0.2/src'
 
Hint: It's a good idea to run 'make test' ;)
 
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: Leaving directory `/opt/redis/redis-5.0.2/src'
[root@centos04 redis-5.0.2]# 
該命令中,前面的”make install PREFIX=”是固定的,而”/opt/redis”是Redis的安裝目錄,一般就這么寫,如若需要安裝在其他地方,只需將此路徑更換即可。

  查看Redis是否安裝成功

[root@centos04 redis-5.0.2]# cd /opt/redis/
[root@centos04 redis]# ll
total 1920
drwxr-xr-x. 2 root root    4096 Nov 22 20:38 bin

 

四、Redis啟動與停止
  Redis有兩種啟動,分別是:前端啟動、后端啟動。要啟動Redis,就需要到Redis的bin目錄下執行啟動命令,先看看bin目錄結構:

[root@centos04 redis]# cd bin/
[root@centos04 bin]# ll
total 54316
-rwxr-xr-x. 1 root root  9200155 Nov 22 20:38 redis-benchmark
-rwxr-xr-x. 1 root root 12251871 Nov 22 20:38 redis-check-aof
-rwxr-xr-x. 1 root root 12251871 Nov 22 20:38 redis-check-rdb
-rwxr-xr-x. 1 root root  9564766 Nov 22 20:38 redis-cli     --->客戶端
lrwxrwxrwx. 1 root root       12 Nov 22 20:38 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 12251871 Nov 22 20:38 redis-server    --->服務端
[root@centos04 bin]# 

 

redis/bin目錄下的幾個文件說明:
  redis-benchmark:redis性能測試工具   redis-check-aof:檢查aof日志的工具   redis-check-dump:檢查rdb日志的工具   redis-cli:連接用的客戶端   redis-server:redis服務進程

 

1、前端啟動與停止

  1)前端啟動的命令:

[root@centos04 bin]# ./redis-server 

  啟動后可以看到Redis的啟動端口為6379(默認),進程id是26765,同時,前端啟動Redis后,終端將進入Redis控制台,沒辦法繼續別的Linux命令,即這個終端窗口就”廢了”,只能輸入Redis自己的命令。下圖:Port: 6379     PID: 26765

[root@centos04 bin]# ./redis-server 
26765:C 22 Nov 2018 20:46:31.066 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
26765:C 22 Nov 2018 20:46:31.066 # Redis version=5.0.2, bits=64, commit=00000000, modified=0, pid=26765, just started
26765:C 22 Nov 2018 20:46:31.066 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
26765:M 22 Nov 2018 20:46:31.067 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.2 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 26765
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
 
26765:M 22 Nov 2018 20:46:31.104 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
26765:M 22 Nov 2018 20:46:31.104 # Server initialized
26765:M 22 Nov 2018 20:46:31.104 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
26765:M 22 Nov 2018 20:46:31.105 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
26765:M 22 Nov 2018 20:46:31.105 * Ready to accept connections

  2)前端啟動的關閉命令:

強制關閉:Ctrl+c

正常關閉:[root@localhost bin]# ./redis-cli shutdown

  對這兩個命令進行對比:
    強制關閉只需在Redis控制台直接執行即可(redis可能會丟失部分數據)。
    正常關閉需要另開一個終端窗口才可執行(redis不會丟失數據,推薦使用)。

[root@centos04 bin]# ./redis-cli shutdown

 

26765:M 22 Nov 2018 20:52:43.151 # User requested shutdown...
26765:M 22 Nov 2018 20:52:43.151 * Saving the final RDB snapshot before exiting.
26765:M 22 Nov 2018 20:52:43.161 * DB saved on disk
26765:M 22 Nov 2018 20:52:43.161 # Redis is now ready to exit, bye bye...
[root@centos04 bin]# 
需要注意一點,一旦前端啟動的關閉命令執行,則redis控制台關閉,redis服務也會停掉。

2、后端啟動與停止

  后端啟動是我們開發中絕對會用到的方式,但在使用后端啟動命令之后,需要做如下幾步配置:

  1)后端啟動的配置:

  第一步,需要把redis源碼目錄下的redis.conf文件復制到redis安裝目錄的bin目錄下。  

[root@centos04 bin]# cp /opt/redis/redis-5.0.2/redis.conf /opt/redis/bin/
[root@centos04 bin]# ll
total 54388
-rw-r--r--. 1 root root       92 Nov 22 20:52 dump.rdb
-rwxr-xr-x. 1 root root  9200155 Nov 22 20:38 redis-benchmark
-rwxr-xr-x. 1 root root 12251871 Nov 22 20:38 redis-check-aof
-rwxr-xr-x. 1 root root 12251871 Nov 22 20:38 redis-check-rdb
-rwxr-xr-x. 1 root root  9564766 Nov 22 20:38 redis-cli
-rw-r--r--. 1 root root    62155 Nov 22 20:57 redis.conf
lrwxrwxrwx. 1 root root       12 Nov 22 20:38 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 12251871 Nov 22 20:38 redis-server
[root@centos04 bin]# 

  第二步,修改redis.conf文件,將daemonize的值改為yes后保存。

[root@centos04 bin]# vim redis.conf 


Redis的配置
  daemonize:如需要在后台運行,把該項的值改為yes
  pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
  bind:指定redis只接收來自該IP的請求,如果不設置,那么將處理所有請求,在生產環節中最好設置該項
  port:監聽端口,默認為6379
  timeout:設置客戶端連接時的超時時間,單位為秒
  loglevel:等級分為4級,debug,revbose,notice和warning。生產環境下一般開啟notice
  logfile:配置log文件地址,默認使用標准輸出,即打印在命令行終端的端口上
  database:設置數據庫的個數,默認使用的數據庫是0
  save:設置redis進行數據庫鏡像的頻率
  rdbcompression:在進行鏡像備份時,是否進行壓縮
  dbfilename:鏡像備份文件的文件名
  dir:數據庫鏡像備份的文件放置的路徑
  slaveof:設置該數據庫為其他數據庫的從數據庫
  masterauth:當主數據庫連接需要密碼驗證時,在這里設定
  requirepass:設置客戶端連接后進行任何其他指定前需要使用的密碼
  maxclients:限制同時連接的客戶端數量
  maxmemory:設置redis能夠使用的最大內存
  appendonly:開啟appendonly模式后,redis會把每一次所接收到的寫操作都追加到appendonly.aof文件中,當redis重新啟動時,會從該文件恢復出之前的狀態
  appendfsync:設置appendonly.aof文件進行同步的頻率
  vm_enabled:是否開啟虛擬內存支持
  vm_swap_file:設置虛擬內存的交換文件的路徑
  vm_max_momery:設置開啟虛擬內存后,redis將使用的最大物理內存的大小,默認為0
  vm_page_size:設置虛擬內存頁的大小
  vm_pages:設置交換文件的總的page數量
  vm_max_thrrads:設置vm IO同時使用的線程數量
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize no

--->

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes
如果發現內容太多,可以通過命令來查找要修改的內容:
  /demonize no   --->向下查找
  ?demonize no   --->向上查找

    經過上面配置后,以后就無需再配置,下面就可以通過命令讓redis后台啟動了。

  2)后端啟動的命令:

[root@centos04 bin]# ./redis-server redis.conf
[root@centos04 bin]# ./redis-server redis.conf
27131:C 22 Nov 2018 21:09:41.117 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
27131:C 22 Nov 2018 21:09:41.117 # Redis version=5.0.2, bits=64, commit=00000000, modified=0, pid=27131, just started
27131:C 22 Nov 2018 21:09:41.117 # Configuration loaded
[root@centos04 bin]# 

    后端啟動命令加了” redis.conf”參數,讓redis根據這個配置文件的配置運行。

    在啟動完redis后台,終端不會進入redis控制台,這就是將redis運行后台

    我們可以查查看系統現在是不是有redis的進程:

[root@centos04 bin]# ps -aux | grep redis
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root     27132  0.1  0.4 152416  7796 ?        Ssl  21:09   0:00 ./redis-server 127.0.0.1:6379
root     27153  0.0  0.0 103252   840 pts/1    S+   21:10   0:00 grep redis
[root@centos04 bin]# 

  3)后端啟動的關閉命令:

強制關閉:[root@localhost bin]# kill -9 進程id

正常關閉:[root@localhost bin]# ./redis-cli shutdown
項目中,建議使用正常關閉。
因為redis作為緩存來使用的話,將數據存儲到內存中,如果使用正常關閉,則會將內存數據持久化到本地之后,再關閉。如果強制關閉,則不會進行持久化操作,可能會造成部分數據丟失。

 

五、Redis客戶端

1、redis自帶客戶端

  在前面介紹redis安裝目錄下bin目錄的結構時,就已經標記出了redis的客戶端,它就是redis-cli。

  這個客戶端有兩個常用的功能:

  1. 用來正常關閉redis服務。
  2. 讓終端進入redis控制台(后台運行redis的場景下用到)。

  1)啟動啟動客戶端命令:

[root@centos04 bin]# ./redis-cli -h 127.0.0.1 -p 6379
-h:指定訪問的redis服務器的ip地址
-p:指定訪問的redis服務器的port端口

  如果使用的ip地址與端口都是默認的,則:

[root@centos04 bin]# ./redis-cli
使用默認配置:默認的ip【127.0.0.1】,默認的port【6379

  進入客戶端:

[root@centos04 bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> 

  2)關閉/退出客戶端

ctrl+c

127.0.0.1:6379> quit

    要關閉該客戶端,使用上述兩個命令中任意一個均可,都不會影響redis數據的保存。  

2、圖形界面客戶端

  有一個redis的圖形界面客戶端軟件,名為redis-destop-manager。

  支持Windows、Mac OS X、Linux,請根據自己的電腦系統選擇下載,這里以windows為例,簡單說下這軟件的使用,安裝很簡單,一路下一步即可,安裝后打開該應用。

  下載 https://redisdesktop.com/download,百度網盤:https://pan.baidu.com/s/1iM1kIwahhs9vV-mAQLV41A

   redis-desktop-manager-0.8.8.384.exe   傻瓜式安裝,點擊下一步就行。

  

  

 

  1)打開redis服務器連接配置

  

  2)添加redis服務器連接並測試是否成功連接

  

  配置IP、端口測試,可以添加auth配置信息,該信息在redis.conf中配置,上文有說明。

   

  連接成功,Redis默認為15個庫,這個庫的個數也是可以配置的,在redis.conf配置文件中databases的值為改變。

  

       注:

             在這里配置IP的時候有一個問題,redis-desktop-manager配置后連接不上服務端,並且打開的redis-desktop-manager客戶端會崩潰。

          在防火牆關閉、redis的redis.conf配置文件中bind 127.0.0.1也注釋掉的情況下還是不行。

       然后就將redis的redis.conf配置文件中改為bind 192.168.48.104---我安裝redis虛擬機的IP。如下:

# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 loopback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#bind 127.0.0.1
bind 192.168.48.104       修改的配置信息。

      redis-desktop-manager客戶端可以連接了,但是linux命令行無法通過默認的方法連接。

默認和合端口
[root@centos04 bin]# ./redis-cli 
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> 

指定IP和端口(虛擬機本地IP)
[root@centos04 bin]# ./redis-cli -h 192.168.48.104 -p 6379
192.168.48.104:6379> select 2
OK
192.168.48.104:6379[2]> 

         查看了redis配置文件redis.conf,發現可以配置多個綁定IP。配置后重啟Redis,發現沒有問題。如下:

# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 loopback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#bind 127.0.0.1
bind 192.168.48.104  127.0.0.1          多個IP中間用空格隔開。

 3、代碼控制客戶端

  redis不僅可以使用命令來操作。

  目前基本上主流的語言都有客戶端支持,比如:java、Python、C、C#、C++、php、Node.js、Go等。  

  在官方網站里有一些Java的客戶端,如:Jedis、Redisson、Jredis、JDBC-Redis等,其中官方推薦使用Jedis和Redisson。

  在企業中用的最多的就是Jedis。 https://github.com/xetorthio/jedis

  - - - - - - - - - - 后續更新 - - - - - - - - - -

六、Redis 數據庫操作

  轉載: http://www.cnblogs.com/alex3714/articles/6217453.html

  

  


免責聲明!

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



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