Redis服務之簡介與部署

来源:https://www.cnblogs.com/qiuhom-1874/archive/2020/07/26/13378138.html
-Advertisement-
Play Games

Redis是什麼?redis是一款基於BSD協議,開源的非關係型資料庫(nosql資料庫),作者是義大利開發者Salvatore Sanfilippo在2009年發佈,使用C語言編寫;redis是基於記憶體存儲,而且是目前比較流行的鍵值資料庫(key-value database),它提供將記憶體通過... ...


  一、簡介

  Redis是什麼?redis是一款基於BSD協議,開源的非關係型資料庫(nosql資料庫),作者是義大利開發者Salvatore Sanfilippo在2009年發佈,使用C語言編寫;redis是基於記憶體存儲,而且是目前比較流行的鍵值資料庫(key-value database),它提供將記憶體通過網路遠程共用的一種服務,提供類似功能的還有memcache,但相比 memcache,redis 還提供了易擴展、高性能、具備數據持久性等功能。主要的應用場景有session共用,常用於web集群中的tomcat或PHP中多web伺服器的session共用;消息隊列,ELK的日誌緩存,部分業務的訂閱發佈系統;計數器,常用於訪問排行榜,商品瀏覽數等和次數相關的數值統計場景;緩存,常用於數據查詢、電商網站商品信息、新聞內容等;相對memcache,redis支持數據的持久化,可以將記憶體的數據保存在磁碟中,重啟redis服務或者伺服器之後可以從備份文件中恢複數據到記憶體繼續使用;支持string(字元串)、hashes(關聯數組)、list(列表)、set(集合)、sorted set(有序集合)、空間索引等數據結構的數據;支持數據的備份,可以實現類似於mysql中的主從模式的數據備份,支持使用快照和AOF(append only file)的數據持久化;支持比memcache更大的value數據,在memcache中只單個key value最大支持1MB,而redis最大支持512MB;Redis 是單線程,而 memcache 是多線程,所以單機情況下沒有 memcache 併發高,但 redis 支持分散式集群以實現更高的併發,單 Redis 實例可以實現數萬併發。除此以外,redis也支持集群橫向擴展,基於redis cluster 的橫向擴展,可以實現分散式集群,大幅度提升性能和數據安全;

  二、redis安裝

  redis安裝支持yum直接安裝,前提是要配好epel源,該軟體存放在epel倉庫中;當然也可以下載源碼直接編譯安裝,根據自己生產環境的需求,yum安裝的版本稍微要舊一點,如果對應版本能夠滿足現有業務的需求,我個人覺得編譯安裝就沒有必要;通常較新的程式在生產環境不建議使用;

  1、yum安裝

  查看redis在epel源中的版本和簡介

[root@node1 ~]# yum info redis
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Available Packages
Name        : redis
Arch        : x86_64
Version     : 3.2.12
Release     : 2.el7
Size        : 544 k
Repo        : epel/x86_64
Summary     : A persistent key-value database
URL         : http://redis.io
License     : BSD
Description : Redis is an advanced key-value store. It is often referred to as a data
            : structure server since keys can contain strings, hashes, lists, sets and
            : sorted sets.
            : 
            : You can run atomic operations on these types, like appending to a string;
            : incrementing the value in a hash; pushing to a list; computing set
            : intersection, union and difference; or getting the member with highest
            : ranking in a sorted set.
            : 
            : In order to achieve its outstanding performance, Redis works with an
            : in-memory dataset. Depending on your use case, you can persist it either
            : by dumping the dataset to disk every once in a while, or by appending
            : each command to a log.
            : 
            : Redis also supports trivial-to-setup master-slave replication, with very
            : fast non-blocking first synchronization, auto-reconnection on net split
            : and so forth.
            : 
            : Other features include Transactions, Pub/Sub, Lua scripting, Keys with a
            : limited time-to-live, and configuration settings to make Redis behave like
            : a cache.
            : 
            : You can use Redis from most programming languages also.

[root@node1 ~]# 

  提示:redis在epel中的版本是3.2.12,目前redis最新的版本是6.0.6,當然我們也可以去第三方網站找最新版本的rpm包,然後使用yum安裝也行;

  yum安裝redis

[root@node1 ~]# yum install -y redis
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package redis.x86_64 0:3.2.12-2.el7 will be installed
--> Processing Dependency: libjemalloc.so.1()(64bit) for package: redis-3.2.12-2.el7.x86_64
--> Running transaction check
---> Package jemalloc.x86_64 0:3.6.0-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                     Arch                      Version                            Repository               Size
========================================================================================================================
Installing:
 redis                       x86_64                    3.2.12-2.el7                       epel                    544 k
Installing for dependencies:
 jemalloc                    x86_64                    3.6.0-1.el7                        epel                    105 k

Transaction Summary
========================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 648 k
Installed size: 1.7 M
Downloading packages:
(1/2): jemalloc-3.6.0-1.el7.x86_64.rpm                                                           | 105 kB  00:00:00     
(2/2): redis-3.2.12-2.el7.x86_64.rpm                                                             | 544 kB  00:00:00     
------------------------------------------------------------------------------------------------------------------------
Total                                                                                   1.4 MB/s | 648 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : jemalloc-3.6.0-1.el7.x86_64                                                                          1/2 
  Installing : redis-3.2.12-2.el7.x86_64                                                                            2/2 
  Verifying  : redis-3.2.12-2.el7.x86_64                                                                            1/2 
  Verifying  : jemalloc-3.6.0-1.el7.x86_64                                                                          2/2 

Installed:
  redis.x86_64 0:3.2.12-2.el7                                                                                           

Dependency Installed:
  jemalloc.x86_64 0:3.6.0-1.el7                                                                                         

Complete!
[root@node1 ~]# 

  查看redis的程式環境

[root@node1 ~]# rpm -ql redis
/etc/logrotate.d/redis
/etc/redis-sentinel.conf
/etc/redis.conf
/etc/systemd/system/redis-sentinel.service.d
/etc/systemd/system/redis-sentinel.service.d/limit.conf
/etc/systemd/system/redis.service.d
/etc/systemd/system/redis.service.d/limit.conf
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof
/usr/bin/redis-check-rdb
/usr/bin/redis-cli
/usr/bin/redis-sentinel
/usr/bin/redis-server
/usr/lib/systemd/system/redis-sentinel.service
/usr/lib/systemd/system/redis.service
/usr/libexec/redis-shutdown
/usr/share/doc/redis-3.2.12
/usr/share/doc/redis-3.2.12/00-RELEASENOTES
/usr/share/doc/redis-3.2.12/BUGS
/usr/share/doc/redis-3.2.12/CONTRIBUTING
/usr/share/doc/redis-3.2.12/MANIFESTO
/usr/share/doc/redis-3.2.12/README.md
/usr/share/licenses/redis-3.2.12
/usr/share/licenses/redis-3.2.12/COPYING
/usr/share/man/man1/redis-benchmark.1.gz
/usr/share/man/man1/redis-check-aof.1.gz
/usr/share/man/man1/redis-check-rdb.1.gz
/usr/share/man/man1/redis-cli.1.gz
/usr/share/man/man1/redis-sentinel.1.gz
/usr/share/man/man1/redis-server.1.gz
/usr/share/man/man5/redis-sentinel.conf.5.gz
/usr/share/man/man5/redis.conf.5.gz
/var/lib/redis
/var/log/redis
/var/run/redis
[root@node1 ~]# 

  提示:從上面命令返回的信息大概能夠知道/etc/redis.conf是redis的配置文件,/usr/bin/redis-server是服務端程式,/usr/bin/redis-cli是客戶端程式,/usr/lib/systemd/system/redis.service是redis的unit file服務管理腳本,/var/lib/redis是redis的數據目錄;

  啟動redis

[root@node1 ~]# systemctl start redis
[root@node1 ~]# ss -ntl
State      Recv-Q Send-Q               Local Address:Port                              Peer Address:Port              
LISTEN     0      128                      127.0.0.1:6379                                         *:*                  
LISTEN     0      128                              *:22                                           *:*                  
LISTEN     0      100                      127.0.0.1:25                                           *:*                  
LISTEN     0      128                             :::22                                          :::*                  
LISTEN     0      100                            ::1:25                                          :::*                  
[root@node1 ~]# 

  提示:redis預設監聽在本機的127.0.0.1的6379埠,預設為了安全沒有監聽在其他地址,所以預設配置的redis不能夠遠程連接使用,必須修改配置文件中的監聽地址才可以;

  驗證:用redis-cli連接redis server

  提示:到此如果能夠正常啟動redis,能夠用客戶端連接到redis server 操作redis說明我們部署的redis服務就部署好了;

  2、編譯安裝redis

  準備源碼包,和編譯環境

[root@node2 yum.repos.d]# yum groupinstall "development tools"
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
extras                                                                                           | 2.9 kB  00:00:00     
extras/7/x86_64/primary_db                                                                       | 205 kB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package autoconf.noarch 0:2.69-11.el7 will be installed
--> Processing Dependency: m4 >= 1.4.14 for package: autoconf-2.69-11.el7.noarch
---> Package automake.noarch 0:1.13.4-3.el7 will be installed
--> Processing Dependency: perl(Thread::Queue) for package: automake-1.13.4-3.el7.noarch
--> Processing Dependency: perl(TAP::Parser) for package: automake-1.13.4-3.el7.noarch
……省略部分內容……
Installed:
  autoconf.noarch 0:2.69-11.el7       automake.noarch 0:1.13.4-3.el7                  bison.x86_64 0:3.0.4-2.el7       
  byacc.x86_64 0:1.9.20130304-3.el7   cscope.x86_64 0:15.8-10.el7                     ctags.x86_64 0:5.8-13.el7        
  diffstat.x86_64 0:1.57-4.el7        doxygen.x86_64 1:1.8.5-4.el7                    elfutils.x86_64 0:0.176-4.el7    
  flex.x86_64 0:2.5.37-6.el7          gcc.x86_64 0:4.8.5-39.el7                       gcc-c++.x86_64 0:4.8.5-39.el7    
  gcc-gfortran.x86_64 0:4.8.5-39.el7  indent.x86_64 0:2.2.11-13.el7                   intltool.noarch 0:0.50.2-7.el7   
  libtool.x86_64 0:2.4.2-22.el7_3     patch.x86_64 0:2.7.1-12.el7_7                   patchutils.x86_64 0:0.3.3-4.el7  
  rcs.x86_64 0:5.9.0-7.el7            redhat-rpm-config.noarch 0:9.1.0-88.el7.centos  rpm-build.x86_64 0:4.11.3-43.el7 
  rpm-sign.x86_64 0:4.11.3-43.el7     subversion.x86_64 0:1.7.14-14.el7               swig.x86_64 0:2.0.10-5.el7       
  systemtap.x86_64 0:4.0-11.el7      

Dependency Installed:
  apr.x86_64 0:1.4.8-5.el7                                 apr-util.x86_64 0:1.5.2-6.el7                               
  avahi-libs.x86_64 0:0.6.31-20.el7                        boost-date-time.x86_64 0:1.53.0-28.el7                      
  boost-system.x86_64 0:1.53.0-28.el7                      boost-thread.x86_64 0:1.53.0-28.el7                         
  bzip2.x86_64 0:1.0.6-13.el7                              cpp.x86_64 0:4.8.5-39.el7                                   
  dwz.x86_64 0:0.11-3.el7                                  dyninst.x86_64 0:9.3.1-3.el7                                
  efivar-libs.x86_64 0:36-12.el7                           emacs-filesystem.noarch 1:24.3-23.el7                       
  gdb.x86_64 0:7.6.1-119.el7                               gettext-common-devel.noarch 0:0.19.8.1-3.el7                
  gettext-devel.x86_64 0:0.19.8.1-3.el7                    glibc-devel.x86_64 0:2.17-307.el7.1                         
  glibc-headers.x86_64 0:2.17-307.el7.1                    gnutls.x86_64 0:3.3.29-9.el7_6                              
  json-c.x86_64 0:0.11-4.el7_0                             kernel-debug-devel.x86_64 0:3.10.0-1127.13.1.el7            
  kernel-headers.x86_64 0:3.10.0-1127.13.1.el7             libdwarf.x86_64 0:20130207-4.el7                            
  libgfortran.x86_64 0:4.8.5-39.el7                        libmodman.x86_64 0:2.0.1-8.el7                              
  libmpc.x86_64 0:1.0.1-3.el7                              libproxy.x86_64 0:0.4.11-11.el7                             
  libquadmath.x86_64 0:4.8.5-39.el7                        libquadmath-devel.x86_64 0:4.8.5-39.el7                     
  libstdc++-devel.x86_64 0:4.8.5-39.el7                    m4.x86_64 0:1.4.16-10.el7                                   
  mokutil.x86_64 0:15-2.el7.centos                         mpfr.x86_64 0:3.1.1-4.el7                                   
  neon.x86_64 0:0.30.0-4.el7                               nettle.x86_64 0:2.7.1-8.el7                                 
  pakchois.x86_64 0:0.4-10.el7                             perl-Test-Harness.noarch 0:3.28-3.el7                       
  perl-Thread-Queue.noarch 0:3.02-2.el7                    perl-XML-Parser.x86_64 0:2.41-10.el7                        
  perl-srpm-macros.noarch 0:1-8.el7                        python-srpm-macros.noarch 0:3-32.el7                        
  subversion-libs.x86_64 0:1.7.14-14.el7                   systemtap-client.x86_64 0:4.0-11.el7                        
  systemtap-devel.x86_64 0:4.0-11.el7                      systemtap-runtime.x86_64 0:4.0-11.el7                       
  trousers.x86_64 0:0.3.14-2.el7                           unzip.x86_64 0:6.0-21.el7                                   
  zip.x86_64 0:3.0-11.el7                                 

Dependency Updated:
  dbus.x86_64 1:1.10.24-14.el7_8          dbus-libs.x86_64 1:1.10.24-14.el7_8    elfutils-libelf.x86_64 0:0.176-4.el7  
  elfutils-libs.x86_64 0:0.176-4.el7      gettext.x86_64 0:0.19.8.1-3.el7        gettext-libs.x86_64 0:0.19.8.1-3.el7  
  glibc.x86_64 0:2.17-307.el7.1           glibc-common.x86_64 0:2.17-307.el7.1   libgcc.x86_64 0:4.8.5-39.el7          
  libgomp.x86_64 0:4.8.5-39.el7           libstdc++.x86_64 0:4.8.5-39.el7        rpm.x86_64 0:4.11.3-43.el7            
  rpm-build-libs.x86_64 0:4.11.3-43.el7   rpm-libs.x86_64 0:4.11.3-43.el7        rpm-python.x86_64 0:4.11.3-43.el7     

Complete!
[root@node2 yum.repos.d]# 

  提示:redis是C語言編寫的,所以在Linux上編譯C語言程式必須先安裝gcc和一些常用的開發庫;

  下載源碼包

  解壓源碼包併進入到源碼包解壓目錄

[root@node2 ~]# tar xf redis-6.0.6.tar.gz -C /usr/local/src/
tar: redis-6.0.6/.github/workflows/ci.yml: time stamp 2020-07-20 14:08:26 is 2772054.289890648 s in the future
tar: redis-6.0.6/.github/workflows/daily.yml: time stamp 2020-07-20 14:08:26 is 2772054.289327433 s in the future
tar: redis-6.0.6/.github/workflows: time stamp 2020-07-20 14:08:26 is 2772054.289233619 s in the future
tar: redis-6.0.6/.github: time stamp 2020-07-20 14:08:26 is 2772054.289183193 s in the future
tar: redis-6.0.6/.gitignore: time stamp 2020-07-20 14:08:26 is 2772054.289072272 s in the future
tar: redis-6.0.6/00-RELEASENOTES: time stamp 2020-07-20 14:08:26 is 2772054.288536889 s in the future
tar: redis-6.0.6/BUGS: time stamp 2020-07-20 14:08:26 is 2772054.288364759 s in the future
tar: redis-6.0.6/CONTRIBUTING: time stamp 2020-07-20 14:08:26 is 2772054.287142408 s in the future
……省略部分內容……
[root@node2 ~]# cd /usr/local/src/
[root@node2 src]# ls
redis-6.0.6
[root@node2 src]# cd redis-6.0.6/
[root@node2 redis-6.0.6]# 

  編譯並安裝redis到/usr/local/redis

  提示:像這類錯誤,原因是centos上的gcc版本是4.8.5,版本過低導致的,解決辦法就是裝一個新版本的gcc(大於5.3)

  升級gcc

[root@node2 redis-6.0.6]# yum install centos-release-scl
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package centos-release-scl.noarch 0:2-3.el7.centos will be installed
--> Processing Dependency: centos-release-scl-rh for package: centos-release-scl-2-3.el7.centos.noarch
--> Running transaction check
---> Package centos-release-scl-rh.noarch 0:2-3.el7.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                              Arch                  Version                         Repository             Size
========================================================================================================================
Installing:
 centos-release-scl                   noarch                2-3.el7.centos                  extras                 12 k
Installing for dependencies:
 centos-release-scl-rh                noarch                2-3.el7.centos                  extras                 12 k

Transaction Summary
========================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 24 k
Installed size: 39 k
Is this ok [y/d/N]: y
Downloading packages:
(1/2): centos-release-scl-2-3.el7.centos.noarch.rpm                                              |  12 kB  00:00:00     
(2/2): centos-release-scl-rh-2-3.el7.centos.noarch.rpm                                           |  12 kB  00:00:00     
------------------------------------------------------------------------------------------------------------------------
Total                                                                                    83 kB/s |  24 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : centos-release-scl-rh-2-3.el7.centos.noarch                                                          1/2 
  Installing : centos-release-scl-2-3.el7.centos.noarch                                                             2/2 
  Verifying  : centos-release-scl-2-3.el7.centos.noarch                                                             1/2 
  Verifying  : centos-release-scl-rh-2-3.el7.centos.noarch                                                          2/2 

Installed:
  centos-release-scl.noarch 0:2-3.el7.centos                                                                            

Dependency Installed:
  centos-release-scl-rh.noarch 0:2-3.el7.centos                                                                         

Complete!
[root@node2 redis-6.0.6]# 

  提示:安裝centos-release-scl主要是添加scl倉庫地址文件到本地

[root@node2 redis-6.0.6]# yum install devtoolset-7-gcc*
Loaded plugins: fastestmirror
centos-sclo-rh                                                                                   | 3.0 kB  00:00:00     
centos-sclo-sclo                                                                                 | 3.0 kB  00:00:00     
(1/2): centos-sclo-sclo/x86_64/primary_db                                                        | 291 kB  00:00:00     
(2/2): centos-sclo-rh/x86_64/primary_db                                                          | 2.9 MB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * centos-sclo-rh: mirrors.aliyun.com
 * centos-sclo-sclo: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package devtoolset-7-gcc.x86_64 0:7.3.1-5.16.el7 will be installed
--> Processing Dependency: devtoolset-7-binutils >= 2.22.52.0.1 for package: devtoolset-7-gcc-7.3.1-5.16.el7.x86_64
……省略部分內容……
Installed:
  devtoolset-7-gcc.x86_64 0:7.3.1-5.16.el7                     devtoolset-7-gcc-c++.x86_64 0:7.3.1-5.16.el7            
  devtoolset-7-gcc-gdb-plugin.x86_64 0:7.3.1-5.16.el7          devtoolset-7-gcc-gfortran.x86_64 0:7.3.1-5.16.el7       
  devtoolset-7-gcc-plugin-devel.x86_64 0:7.3.1-5.16.el7       

Dependency Installed:
  audit-libs-python.x86_64 0:2.8.5-4.el7                    checkpolicy.x86_64 0:2.5-8.el7                             
  devtoolset-7-binutils.x86_64 0:2.28-11.el7                devtoolset-7-libquadmath-devel.x86_64 0:7.3.1-5.16.el7     
  devtoolset-7-libstdc++-devel.x86_64 0:7.3.1-5.16.el7      devtoolset-7-runtime.x86_64 0:7.1-4.el7                    
  gmp-devel.x86_64 1:6.0.0-15.el7                           libcgroup.x86_64 0:0.41-21.el7                             
  libgfortran4.x86_64 0:8.3.1-2.1.1.el7                     libmpc-devel.x86_64 0:1.0.1-3.el7                          
  libsemanage-python.x86_64 0:2.5-14.el7                    mpfr-devel.x86_64 0:3.1.1-4.el7                            
  policycoreutils-python.x86_64 0:2.5-34.el7                python-IPy.noarch 0:0.75-6.el7                             
  scl-utils.x86_64 0:20130529-19.el7                        setools-libs.x86_64 0:3.3.8-4.el7                          

Dependency Updated:
  audit.x86_64 0:2.8.5-4.el7                audit-libs.x86_64 0:2.8.5-4.el7          libselinux.x86_64 0:2.5-15.el7     
  libselinux-python.x86_64 0:2.5-15.el7     libselinux-utils.x86_64 0:2.5-15.el7     libsemanage.x86_64 0:2.5-14.el7    
  libsepol.x86_64 0:2.5-10.el7              policycoreutils.x86_64 0:2.5-34.el7     

Complete!
[root@node2 redis-6.0.6]#

  切換新版本的gcc

  提示:這種方式是臨時切換方式,如果需要永久切換,我們可以在/etc/profile文件中追加一條 souce /opt/rh/devtoolset-7/enable命令即可;

  現在我們把gcc的版本切換到7.3.1,再來編譯redis看看是否還會有錯誤發生?

[root@node2 redis-6.0.6]# make PREFIX=/usr/local/redis install
make: Warning: File `Makefile' has modification time 2768632 s in the future
cd src && make install
make[1]: Entering directory `/usr/local/src/redis-6.0.6/src'
make[1]: Warning: File `Makefile' has modification time 2768632 s in the future
    CC adlist.o
    CC quicklist.o
    CC ae.o
    CC anet.o
    CC dict.o
    CC server.o
    CC sds.o
    CC zmalloc.o
    CC lzf_c.o
    CC lzf_d.o
    CC pqsort.o
    CC zipmap.o
    CC sha1.o
    CC ziplist.o
    CC release.o
    CC networking.o
    CC util.o
    CC object.o
    CC db.o
    CC replication.o
    CC rdb.o
    CC t_string.o
    CC t_list.o
    CC t_set.o
    CC t_zset.o
    CC t_hash.o
    CC config.o
    CC aof.o
    CC pubsub.o
    CC multi.o
    CC debug.o
    CC sort.o
    CC intset.o
    CC syncio.o
    CC cluster.o
    CC crc16.o
    CC endianconv.o
    CC slowlog.o
    CC scripting.o
    CC bio.o
    CC rio.o
    CC rand.o
    CC memtest.o
    CC crcspeed.o
    CC crc64.o
    CC bitops.o
    CC sentinel.o
    CC notify.o
    CC setproctitle.o
    CC blocked.o
    CC hyperloglog.o
    CC latency.o
    CC sparkline.o
    CC redis-check-rdb.o
    CC redis-check-aof.o
    CC geo.o
    CC lazyfree.o
    CC module.o
    CC evict.o
    CC expire.o
    CC geohash.o
    CC geohash_helper.o
    CC childinfo.o
    CC defrag.o
    CC siphash.o
    CC rax.o
    CC t_stream.o
    CC listpack.o
    CC localtime.o
    CC lolwut.o
    CC lolwut5.o
    CC lolwut6.o
    CC acl.o
    CC gopher.o
    CC tracking.o
    CC connection.o
    CC tls.o
    CC sha256.o
    CC timeout.o
    CC setcpuaffinity.o
    LINK redis-server
    INSTALL redis-sentinel
    CC redis-cli.o
    LINK redis-cli
    CC redis-benchmark.o
    LINK redis-benchmark
    INSTALL redis-check-rdb
    INSTALL redis-check-aof

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: warning:  Clock skew detected.  Your build may be incomplete.
make[1]: Leaving directory `/usr/local/src/redis-6.0.6/src'
make: warning:  Clock skew detected.  Your build may be incomplete.
[root@node2 redis-6.0.6]#

  提示:切換gcc後,再次編譯安裝就沒有報錯了,到此redis編譯安裝就完成了;

  查看編譯安裝好的redis目錄結構

[root@node2 redis-6.0.6]# tree /usr/local/redis/
/usr/local/redis/
└── bin
    ├── redis-benchmark
    ├── redis-check-aof
    ├── redis-check-rdb
    ├── redis-cli
    ├── redis-sentinel -> redis-server
    └── redis-server

1 directory, 6 files
[root@node2 redis-6.0.6]# 

  創建軟連接到/usr/bin/

  創建redis用戶,並拷貝配置文件到redis安裝目錄

   更改redis安裝目錄下的所有文件的屬主和屬組為redis

[root@node2 redis-6.0.6]# chown -R redis.redis /usr/local/redis/
[root@node2 redis-6.0.6]# ll /usr/local/redis/
total 0
drwxr-xr-x 2 redis redis 134 Jun 18 13:04 bin
drwxr-xr-x 2 redis redis  24 Jun 18 13:18 etc
[root@node2 redis-6.0.6]# ll /usr/local/redis/bin/
total 35700
-rwxr-xr-x 1 redis redis 4717872 Jun 18 13:04 redis-benchmark
-rwxr-xr-x 1 redis redis 8952752 Jun 18 13:04 redis-check-aof
-rwxr-xr-x 1 redis redis 8952752 Jun 18 13:04 redis-check-rdb
-rwxr-xr-x 1 redis redis 4973312 Jun 18 13:04 redis-cli
lrwxrwxrwx 1 redis redis      12 Jun 18 13:04 redis-sentinel -> redis-server
-rwxr-xr-x 1 redis redis 8952752 Jun 18 13:04 redis-server
[root@node2 redis-6.0.6]# ll /usr/local/redis/etc/
total 84
-rw-r--r-- 1 redis redis 83392 Jun 18 13:18 redis.conf
[root@node2 redis-6.0.6]# 

  前臺啟動redis

  提示:前臺啟動redis它給了我們三個警告,第一個是backlog設置的是511,但是/proc/sys/net/core/somaxconn設置的是128,需要更改;第二是是內核參數overcommit_memory設置的是0,如果設置成0在內核將檢查是否有足夠的可用記憶體供應用進程使用時,如果有足夠的可用記憶體,記憶體申請允許,否則記憶體申請失敗,並把錯誤返回給應用進程。這個內核參數有三個值0,1,2;其中1表示內核允許分配所有的物理記憶體,而不管當前的記憶體狀態如何。2表示內核允許分配超過所有物理記憶體和交換空間總和的記憶體;第三個警告是內核開啟了大頁記憶體動態分配,需要關閉,讓redis自己負責記憶體管理;

  解決警告提示

  提示:在centos7上/etc/rc.d/rc.local這個文件是沒有執行許可權的,這意味著我們在這個文件中寫的開機啟動命令是不會執行的,我們需要給它加上執行許可權,在開機啟動時裡面寫的開機啟動命令才會被執行;在centos6上我們不需要給它加執行許可權;

  再次前臺啟動redis看看,看看是否還會有警告信息

  驗證6379埠是否啟動,是否可以用redis-cli連接到redis-server上?

  提示:可以看到重新開一個終端,能夠看到6379埠監聽在127.0.0.1這個地址上,並且我們使用redis-cli也可以正常連接到redis-server上正常操作;

  給redis提供unit file讓systemd來管理redis

  提示:上面的ExecStart需要根據redis-server所在目錄來指定

  unit file

[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Type=forking
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
View Code

  修改配置文件讓redis預設後臺運行

  驗證:用systemctl命令來管理redis, 看看是否能夠起停redis?

  提示:可以看到用systemd可以正常的啟動,重啟,停止redis,設置redis開啟啟動,關閉開機啟動,查看狀態這些操作;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 二分查找(英語:binary search),也叫折半查找(英語:half-interval search),是一種在有序數組中查找特定元素的搜索演算法。所以,二分查找的前提是數組必須是有序的。 二分查找只適用順序存儲結構。為保持表的有序性,在順序結構里插入和刪除都必須移動大量的結點。因此,二分查找特... ...
  • 記憶體管理的目標: 實現記憶體的分配和回收 合理的分配記憶體空間,提高記憶體利用率,提高記憶體訪問速度 存儲器的層次結構 速度由快到慢,容量由小到大,價格由高到低 寄存器->L1高速緩存 → L2高速緩存 → 主存儲器 → 本地二級存儲 → 遠程二級存儲(web/ftp) 特點:每個層級的存儲器都保存來自下一 ...
  • 目標 1.能夠自動刪除文件 2.能夠判斷文件達到一定量之後,執行目標1 3.自動化運行腳本。 知識點 1.if語句 2.crontab語句 3.賦值語句 編寫 #!bin/bash while [ $(du -sb /home/linuxprobe/Desktop/log | awk '{print ...
  • 1. ZABBIX備份 [root@iZ2zeapnvuohe8p14289u6Z /]# mkdir -p /soft/zabbixback/zabbix-backup [root@iZ2zeapnvuohe8p14289u6Z /]# cp /etc/zabbix/zabbix_server.c ...
  • 恩智浦半導體於2017年開始推出的i.MX RT系列重新定義了MCU,其第一款晶元i.MX RT1052,主頻高達600MHz,直接引爆眾多MCU開發者的神經。如今i.MX RT發佈已近三年,陸續推出了9款型號,細心的你會發生其實際上已經衍生為兩大陣營,分別是CM7內核的i.MX RT1xxx系列(... ...
  • 人這一輩子,真的是非常不容易:讀書時,被老師、同學嘲笑,工作時,被老闆、同事嘲笑,就連出去擼個串兒,還可能被朋友嘲笑…… 這些也就算了,畢竟大家還都是同類,都是活生生的人。但是,你如果被 Linux 終端給嘲笑了,你的內心會是什麼感受? 今天要介紹的,是一個非常有趣的 CLI 工具,這個工具可以實現 ...
  • 1.在linux系統下安裝跨系統傳輸文件工具 root用戶下 根目錄輸入 yum -y install lrzsz 2.把apache-jmeter-4.0zip包 用rz命令上傳到linux系統的根目錄下 解壓 3.配置jmeter環境變數 vim /etc/profile 添加 export P ...
  • 西北望鄉何處是,東南見月幾回圓。 月亮又慢悠悠的掛上了天空,趁著睡前夢囈,我就帶領各位可愛的讀者們探索MySql最後的子查詢部分。 說明:有些查詢結果出來結果截圖與題目要求不一樣會出現多餘的欄位是為了方便展示結果的可讀性。實際操作的讀者可以刪除SELECT後面多餘的欄位得到正確的結果。 #WHERE ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...