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.targetView Code
修改配置文件讓redis預設後臺運行
驗證:用systemctl命令來管理redis, 看看是否能夠起停redis?
提示:可以看到用systemd可以正常的啟動,重啟,停止redis,設置redis開啟啟動,關閉開機啟動,查看狀態這些操作;