zoukankan      html  css  js  c++  java
  • 生产环境搭建主被redis

    1.redis简介

         REmote DIctionary Server(Redis)是一个几乎key-value键值对的持久化数据库存储系统。redis和大名鼎鼎的Memcached缓存服务很像,但是redis支持的数据存储类型更丰富,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。

         这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached缓存服务一样,为了保证效率,数据都是缓存在内存中提供服务。和memcached不同的是,redis持久化服务还会周期的把更新的数据写入到磁盘以及把修改的操作记录追加到文件里记录下来,比memcached更有优势的是,redis还支持master-slave(主从)同步,这点很类似关系型数据库MySQL。

         redis的出现,再一定程度上弥补了memcached这类key-value内存缓存的不足。在部分场合可以对关系型数据库起到很好的补充作用,redis提供了Python、Ruby、Erlang、PHP客户端,使用很方便。redis官方文档如下:

         http://www.redis.io/documentation

         http://www.redis.cn/

      2 Redis 的特点

    1)性能很高:redis能支持超过100K+每秒的读写频率

    2)丰富的数据类型:redis支持二进制的Strings、Lists、Hashes、Sets及Ordered Sets数据类型操作

    3)原子:Redis的所有操作都是原子性的,同时redis还支持对几个操作合并后的原子执行

    4)丰富的特性:Redis还支持publish/subscribe,通知,key过期等特性

    5)redis支持异机主从复制

    6)可以持久化存储数据,与memcached不同

      3 Redis的数据类型

    Redis最为常见的数据类型主要为有以下五种:

       1)String

       2)Hash

       3)List

       4)Set

       5)Sorted set

    4 redis的应用场景

       传统的MySQL + Memcached 的网站架构遇到的问题:

        MySQL数据库实际上适合进行海量数据存储的,加上通过Memcached将热点数据存放到内存cache里,达到加速数据访问的目的,绝大部分公司曾经使用过这样的架构,但随着业务数据的量的不断增加,和访问量的持续增长,很多问题就会暴露出来:

        1)需要不断的对MySQL进行拆库拆表,Memcached也需要不断跟着扩容,扩容和维护工作占据大量开发运维时间

        2)memcached与MySQL数据库一直性问题是个老大难。

        3)memcached数据命中率低或者down机,会导致大量访问直接穿透到数据库,导致MySQL无法支撑访问

        4)跨机房cache同步一致性问题

    redis 的最佳应用场景:

     

    1)Redis 最佳使用场景是全部数据in-memory

    2)Redis更多场景是作为Memcached的替代品来使用

    3)当需要除key/value之外的更多数据类型支持时,使用Redis更合适。

    4)当存储的数据不能被剔除时,使用Redis更合适。

    5) 需要负载均衡的场景(主从同步)

    更多Redis作者谈Redis应用场景:http://blog.nosqlfan.com/html/2235.html

    业务场景:

    1、使用Redis bitmap进行活跃用户统计

     http://blog.nosqlfan.com/html/3501.html

       

    这里对Redis数据库做个小结

    1)提高了DB的可扩展性,只需要将新加的数据放到新加的服务器上就开了

    2)提高了DB的可用性,只影响到需要访问的shard服务器上的数据用户

    3)提高了DB的可维护性,对系统的升级和配置可以按shard一个个来搞,对服务产生的影响较小

    4)小的数据库的查询压力小,查询更快,性能更好

    使用过程中的一些经验与教训,做个小结:

    1)要进行Master-slave配置,出现服务器故障时可以直接切换。

    2)在master侧禁用数据持久化,只需要在slave上配置数据持久化

    3)物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉。这个情况就是灾难

    4)当Redis物理内存使用超过内存总量的3/5时就会开始比较危险了,就开始做swap,内存碎片大

    5)当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间

    6)redis与DB同步写的问题,先写DB,然后再写redis,因为写内存基本上没问题

    操作系统:

    1 [root@localhost ~]# cat /etc/redhat-release 
    2 CentOS Linux release 7.2.1511 (Core) 
    3 [root@localhost ~]# uname -a
    4 Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
    5 [root@localhost ~]# 

    下载redis安装包,这里用redis-3.2.12:

    1 [root@localhost tools]# ls -ald redis-3.2.12*
    2 -rw-r--r-- 1 root root 1551468 Jul 24 20:29 redis-3.2.12.tar.gz
    3 [root@localhost tools]# 

    解压编译安装

      1 [root@localhost tools]# tar xf redis-3.2.12.tar.gz 
      2 [root@localhost tools]# cd redis-3.2.12/
      3 [root@localhost redis-3.2.12]# cat README.md 
      4 This README is just a fast *quick start* document. You can find more detailed documentation at http://redis.io.
      5 
      6 What is Redis?
      7 --------------
      8 
      9 Redis is often referred as a *data structures* server. What this means is that Redis provides access to mutable data structures via a set of commands, which are sent using a *server-client* model with TCP sockets and a simple protocol. So different processes can query and modify the same data structures in a shared way.
     10 
     11 Data structures implemented into Redis have a few special properties:
     12 
     13 * Redis cares to store them on disk, even if they are always served and modified into the server memory. This means that Redis is fast, but that is also non-volatile.
     14 * Implementation of data structures stress on memory efficiency, so data structures inside Redis will likely use less memory compared to the same data structure modeled using an high level programming language.
     15 * Redis offers a number of features that are natural to find in a database, like replication, tunable levels of durability, cluster, high availability.
     16 
     17 Another good example is to think of Redis as a more complex version of memcached, where the operations are not just SETs and GETs, but operations to work with complex data types like Lists, Sets, ordered data structures, and so forth.
     18 
     19 If you want to know more, this is a list of selected starting points:
     20 
     21 * Introduction to Redis data types. http://redis.io/topics/data-types-intro
     22 * Try Redis directly inside your browser. http://try.redis.io
     23 * The full list of Redis commands. http://redis.io/commands
     24 * There is much more inside the Redis official documentation. http://redis.io/documentation
     25 
     26 Building Redis
     27 --------------
     28 
     29 Redis can be compiled and used on Linux, OSX, OpenBSD, NetBSD, FreeBSD.
     30 We support big endian and little endian architectures, and both 32 bit
     31 and 64 bit systems.
     32 
     33 It may compile on Solaris derived systems (for instance SmartOS) but our
     34 support for this platform is *best effort* and Redis is not guaranteed to
     35 work as well as in Linux, OSX, and *BSD there.
     36 
     37 It is as simple as:
     38 
     39     % make
     40 
     41 You can run a 32 bit Redis binary using:
     42 
     43     % make 32bit
     44 
     45 After building Redis is a good idea to test it, using:
     46 
     47     % make test
     48 
     49 Fixing build problems with dependencies or cached build options
     50 ---------
     51 
     52 Redis has some dependencies which are included into the `deps` directory.
     53 `make` does not rebuild dependencies automatically, even if something in the
     54 source code of dependencies is changed.
     55 
     56 When you update the source code with `git pull` or when code inside the
     57 dependencies tree is modified in any other way, make sure to use the following
     58 command in order to really clean everything and rebuild from scratch:
     59 
     60     make distclean
     61 
     62 This will clean: jemalloc, lua, hiredis, linenoise.
     63 
     64 Also if you force certain build options like 32bit target, no C compiler
     65 optimizations (for debugging purposes), and other similar build time options,
     66 those options are cached indefinitely until you issue a `make distclean`
     67 command.
     68 
     69 Fixing problems building 32 bit binaries
     70 ---------
     71 
     72 If after building Redis with a 32 bit target you need to rebuild it
     73 with a 64 bit target, or the other way around, you need to perform a
     74 `make distclean` in the root directory of the Redis distribution.
     75 
     76 In case of build errors when trying to build a 32 bit binary of Redis, try
     77 the following steps:
     78 
     79 * Install the packages libc6-dev-i386 (also try g++-multilib).
     80 * Try using the following command line instead of `make 32bit`:
     81   `make CFLAGS="-m32 -march=native" LDFLAGS="-m32"`
     82 
     83 Allocator
     84 ---------
     85 
     86 Selecting a non-default memory allocator when building Redis is done by setting
     87 the `MALLOC` environment variable. Redis is compiled and linked against libc
     88 malloc by default, with the exception of jemalloc being the default on Linux
     89 systems. This default was picked because jemalloc has proven to have fewer
     90 fragmentation problems than libc malloc.
     91 
     92 To force compiling against libc malloc, use:
     93 
     94     % make MALLOC=libc
     95 
     96 To compile against jemalloc on Mac OS X systems, use:
     97 
     98     % make MALLOC=jemalloc
     99 
    100 Verbose build
    101 -------------
    102 
    103 Redis will build with a user friendly colorized output by default.
    104 If you want to see a more verbose output use the following:
    105 
    106     % make V=1
    107 
    108 Running Redis
    109 -------------
    110 
    111 To run Redis with the default configuration just type:
    112 
    113     % cd src
    114     % ./redis-server
    115     
    116 If you want to provide your redis.conf, you have to run it using an additional
    117 parameter (the path of the configuration file):
    118 
    119     % cd src
    120     % ./redis-server /path/to/redis.conf
    121 
    122 It is possible to alter the Redis configuration passing parameters directly
    123 as options using the command line. Examples:
    124 
    125     % ./redis-server --port 9999 --slaveof 127.0.0.1 6379
    126     % ./redis-server /etc/redis/6379.conf --loglevel debug
    127 
    128 All the options in redis.conf are also supported as options using the command
    129 line, with exactly the same name.
    130 
    131 Playing with Redis
    132 ------------------
    133 
    134 You can use redis-cli to play with Redis. Start a redis-server instance,
    135 then in another terminal try the following:
    136 
    137     % cd src
    138     % ./redis-cli
    139     redis> ping
    140     PONG
    141     redis> set foo bar
    142     OK
    143     redis> get foo
    144     "bar"
    145     redis> incr mycounter
    146     (integer) 1
    147     redis> incr mycounter
    148     (integer) 2
    149     redis>
    150 
    151 You can find the list of all the available commands at http://redis.io/commands.
    152 
    153 Installing Redis
    154 -----------------
    155 
    156 In order to install Redis binaries into /usr/local/bin just use:
    157 
    158     % make install
    159 
    160 You can use `make PREFIX=/some/other/directory install` if you wish to use a
    161 different destination.
    162 
    163 Make install will just install binaries in your system, but will not configure
    164 init scripts and configuration files in the appropriate place. This is not
    165 needed if you want just to play a bit with Redis, but if you are installing
    166 it the proper way for a production system, we have a script doing this
    167 for Ubuntu and Debian systems:
    168 
    169     % cd utils
    170     % ./install_server.sh
    171 
    172 The script will ask you a few questions and will setup everything you need
    173 to run Redis properly as a background daemon that will start again on
    174 system reboots.
    175 
    176 You'll be able to stop and start Redis using the script named
    177 `/etc/init.d/redis_<portnumber>`, for instance `/etc/init.d/redis_6379`.
    178 
    179 Code contributions
    180 ---
    181 
    182 Note: by contributing code to the Redis project in any form, including sending
    183 a pull request via Github, a code fragment or patch via private email or
    184 public discussion groups, you agree to release your code under the terms
    185 of the BSD license that you can find in the [COPYING][1] file included in the Redis
    186 source distribution.
    187 
    188 Please see the [CONTRIBUTING][2] file in this source distribution for more
    189 information.
    190 
    191 Enjoy!
    192 
    193 [1]: https://github.com/antirez/redis/blob/unstable/COPYING
    194 [2]: https://github.com/antirez/redis/blob/unstable/CONTRIBUTING
    195 [root@localhost redis-3.2.12]# 

    开始编译:centos7系统,编译参数“make MALLOC=jemalloc

      1 make MALLOC=jemalloc
      2 [root@localhost redis-3.2.12]# make MALLOC=jemalloc
      3 cd src && make all
      4 make[1]: Entering directory `/root/tools/redis-3.2.12/src'
      5 rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html
      6 (cd ../deps && make distclean)
      7 make[2]: Entering directory `/root/tools/redis-3.2.12/deps'
      8 (cd hiredis && make clean) > /dev/null || true
      9 (cd linenoise && make clean) > /dev/null || true
     10 (cd lua && make clean) > /dev/null || true
     11 (cd geohash-int && make clean) > /dev/null || true
     12 (cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true
     13 (rm -f .make-*)
     14 make[2]: Leaving directory `/root/tools/redis-3.2.12/deps'
     15 (rm -f .make-*)
     16 echo STD=-std=c99 -pedantic -DREDIS_STATIC='' >> .make-settings
     17 echo WARN=-Wall -W >> .make-settings
     18 echo OPT=-O2 >> .make-settings
     19 echo MALLOC=jemalloc >> .make-settings
     20 echo CFLAGS= >> .make-settings
     21 echo LDFLAGS= >> .make-settings
     22 echo REDIS_CFLAGS= >> .make-settings
     23 echo REDIS_LDFLAGS= >> .make-settings
     24 echo PREV_FINAL_CFLAGS=-std=c99 -pedantic -DREDIS_STATIC='' -Wall -W -O2 -g -ggdb   -I../deps/geohash-int -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src -DUSE_JEMALLOC -I../deps/jemalloc/include >> .make-settings
     25 echo PREV_FINAL_LDFLAGS=  -g -ggdb -rdynamic >> .make-settings
     26 (cd ../deps && make hiredis linenoise lua geohash-int jemalloc)
     27 make[2]: Entering directory `/root/tools/redis-3.2.12/deps'
     28 (cd hiredis && make clean) > /dev/null || true
     29 (cd linenoise && make clean) > /dev/null || true
     30 (cd lua && make clean) > /dev/null || true
     31 (cd geohash-int && make clean) > /dev/null || true
     32 (cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true
     33 (rm -f .make-*)
     34 (echo "" > .make-cflags)
     35 (echo "" > .make-ldflags)
     36 MAKE hiredis
     37 cd hiredis && make static
     38 make[3]: Entering directory `/root/tools/redis-3.2.12/deps/hiredis'
     39 cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c
     40 cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  hiredis.c
     41 cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  sds.c
     42 cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  async.c
     43 ar rcs libhiredis.a net.o hiredis.o sds.o async.o
     44 make[3]: Leaving directory `/root/tools/redis-3.2.12/deps/hiredis'
     45 MAKE linenoise
     46 cd linenoise && make
     47 make[3]: Entering directory `/root/tools/redis-3.2.12/deps/linenoise'
     48 cc  -Wall -Os -g  -c linenoise.c
     49 make[3]: Leaving directory `/root/tools/redis-3.2.12/deps/linenoise'
     50 MAKE lua
     51 cd lua/src && make all CFLAGS="-O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC='' " MYLDFLAGS="" AR="ar rcu"
     52 make[3]: Entering directory `/root/tools/redis-3.2.12/deps/lua/src'
     53 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lapi.o lapi.c
     54 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lcode.o lcode.c
     55 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldebug.o ldebug.c
     56 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldo.o ldo.c
     57 ldo.c: In function ‘f_parser’:
     58 ldo.c:496:7: warning: unused variable ‘c’ [-Wunused-variable]
     59    int c = luaZ_lookahead(p->z);
     60        ^
     61 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldump.o ldump.c
     62 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lfunc.o lfunc.c
     63 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lgc.o lgc.c
     64 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o llex.o llex.c
     65 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lmem.o lmem.c
     66 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lobject.o lobject.c
     67 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lopcodes.o lopcodes.c
     68 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lparser.o lparser.c
     69 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstate.o lstate.c
     70 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstring.o lstring.c
     71 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltable.o ltable.c
     72 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltm.o ltm.c
     73 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lundump.o lundump.c
     74 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lvm.o lvm.c
     75 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lzio.o lzio.c
     76 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o strbuf.o strbuf.c
     77 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o fpconv.o fpconv.c
     78 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lauxlib.o lauxlib.c
     79 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lbaselib.o lbaselib.c
     80 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldblib.o ldblib.c
     81 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o liolib.o liolib.c
     82 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lmathlib.o lmathlib.c
     83 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o loslib.o loslib.c
     84 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltablib.o ltablib.c
     85 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstrlib.o lstrlib.c
     86 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o loadlib.o loadlib.c
     87 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o linit.o linit.c
     88 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_cjson.o lua_cjson.c
     89 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_struct.o lua_struct.c
     90 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_cmsgpack.o lua_cmsgpack.c
     91 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_bit.o lua_bit.c
     92 ar rcu liblua.a lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o strbuf.o fpconv.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o loadlib.o linit.o lua_cjson.o lua_struct.o lua_cmsgpack.o lua_bit.o    # DLL needs all object files
     93 ranlib liblua.a
     94 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua.o lua.c
     95 cc -o lua  lua.o liblua.a -lm 
     96 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o luac.o luac.c
     97 cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o print.o print.c
     98 cc -o luac  luac.o print.o liblua.a -lm 
     99 make[3]: Leaving directory `/root/tools/redis-3.2.12/deps/lua/src'
    100 MAKE geohash-int
    101 cd geohash-int && make
    102 make[3]: Entering directory `/root/tools/redis-3.2.12/deps/geohash-int'
    103 cc  -Wall -O2 -g  -c geohash.c
    104 cc  -Wall -O2 -g  -c geohash_helper.c
    105 make[3]: Leaving directory `/root/tools/redis-3.2.12/deps/geohash-int'
    106 MAKE jemalloc
    107 cd jemalloc && ./configure --with-lg-quantum=3 --with-jemalloc-prefix=je_ --enable-cc-silence CFLAGS="-std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops " LDFLAGS=""
    108 checking for xsltproc... /usr/bin/xsltproc
    109 checking for gcc... gcc
    110 checking whether the C compiler works... yes
    111 checking for C compiler default output file name... a.out
    112 checking for suffix of executables... 
    113 checking whether we are cross compiling... no
    114 checking for suffix of object files... o
    115 checking whether we are using the GNU C compiler... yes
    116 checking whether gcc accepts -g... yes
    117 checking for gcc option to accept ISO C89... none needed
    118 checking how to run the C preprocessor... gcc -E
    119 checking for grep that handles long lines and -e... /usr/bin/grep
    120 checking for egrep... /usr/bin/grep -E
    121 checking for ANSI C header files... yes
    122 checking for sys/types.h... yes
    123 checking for sys/stat.h... yes
    124 checking for stdlib.h... yes
    125 checking for string.h... yes
    126 checking for memory.h... yes
    127 checking for strings.h... yes
    128 checking for inttypes.h... yes
    129 checking for stdint.h... yes
    130 checking for unistd.h... yes
    131 checking whether byte ordering is bigendian... no
    132 checking size of void *... 8
    133 checking size of int... 4
    134 checking size of long... 8
    135 checking size of intmax_t... 8
    136 checking build system type... x86_64-unknown-linux-gnu
    137 checking host system type... x86_64-unknown-linux-gnu
    138 checking whether pause instruction is compilable... yes
    139 checking for ar... ar
    140 checking malloc.h usability... yes
    141 checking malloc.h presence... yes
    142 checking for malloc.h... yes
    143 checking whether malloc_usable_size definition can use const argument... no
    144 checking whether __attribute__ syntax is compilable... yes
    145 checking whether compiler supports -fvisibility=hidden... yes
    146 checking whether compiler supports -Werror... yes
    147 checking whether tls_model attribute is compilable... yes
    148 checking whether compiler supports -Werror... yes
    149 checking whether alloc_size attribute is compilable... yes
    150 checking whether compiler supports -Werror... yes
    151 checking whether format(gnu_printf, ...) attribute is compilable... yes
    152 checking whether compiler supports -Werror... yes
    153 checking whether format(printf, ...) attribute is compilable... yes
    154 checking for a BSD-compatible install... /usr/bin/install -c
    155 checking for ranlib... ranlib
    156 checking for ld... /usr/bin/ld
    157 checking for autoconf... /usr/bin/autoconf
    158 checking for memalign... yes
    159 checking for valloc... yes
    160 checking configured backtracing method... N/A
    161 checking for sbrk... yes
    162 checking whether utrace(2) is compilable... no
    163 checking whether valgrind is compilable... no
    164 checking whether a program using __builtin_ffsl is compilable... yes
    165 checking LG_PAGE... 12
    166 checking pthread.h usability... yes
    167 checking pthread.h presence... yes
    168 checking for pthread.h... yes
    169 checking for pthread_create in -lpthread... yes
    170 checking for library containing clock_gettime... none required
    171 checking for secure_getenv... yes
    172 checking for issetugid... no
    173 checking for _malloc_thread_cleanup... no
    174 checking for _pthread_mutex_init_calloc_cb... no
    175 checking for TLS... yes
    176 checking whether C11 atomics is compilable... no
    177 checking whether atomic(9) is compilable... no
    178 checking whether Darwin OSAtomic*() is compilable... no
    179 checking whether madvise(2) is compilable... yes
    180 checking whether to force 32-bit __sync_{add,sub}_and_fetch()... no
    181 checking whether to force 64-bit __sync_{add,sub}_and_fetch()... no
    182 checking for __builtin_clz... yes
    183 checking whether Darwin OSSpin*() is compilable... no
    184 checking whether glibc malloc hook is compilable... yes
    185 checking whether glibc memalign hook is compilable... yes
    186 checking whether pthreads adaptive mutexes is compilable... yes
    187 checking for stdbool.h that conforms to C99... yes
    188 checking for _Bool... yes
    189 configure: creating ./config.status
    190 config.status: creating Makefile
    191 config.status: creating jemalloc.pc
    192 config.status: creating doc/html.xsl
    193 config.status: creating doc/manpages.xsl
    194 config.status: creating doc/jemalloc.xml
    195 config.status: creating include/jemalloc/jemalloc_macros.h
    196 config.status: creating include/jemalloc/jemalloc_protos.h
    197 config.status: creating include/jemalloc/jemalloc_typedefs.h
    198 config.status: creating include/jemalloc/internal/jemalloc_internal.h
    199 config.status: creating test/test.sh
    200 config.status: creating test/include/test/jemalloc_test.h
    201 config.status: creating config.stamp
    202 config.status: creating bin/jemalloc-config
    203 config.status: creating bin/jemalloc.sh
    204 config.status: creating bin/jeprof
    205 config.status: creating include/jemalloc/jemalloc_defs.h
    206 config.status: creating include/jemalloc/internal/jemalloc_internal_defs.h
    207 config.status: creating test/include/test/jemalloc_test_defs.h
    208 config.status: executing include/jemalloc/internal/private_namespace.h commands
    209 config.status: executing include/jemalloc/internal/private_unnamespace.h commands
    210 config.status: executing include/jemalloc/internal/public_symbols.txt commands
    211 config.status: executing include/jemalloc/internal/public_namespace.h commands
    212 config.status: executing include/jemalloc/internal/public_unnamespace.h commands
    213 config.status: executing include/jemalloc/internal/size_classes.h commands
    214 config.status: executing include/jemalloc/jemalloc_protos_jet.h commands
    215 config.status: executing include/jemalloc/jemalloc_rename.h commands
    216 config.status: executing include/jemalloc/jemalloc_mangle.h commands
    217 config.status: executing include/jemalloc/jemalloc_mangle_jet.h commands
    218 config.status: executing include/jemalloc/jemalloc.h commands
    219 ===============================================================================
    220 jemalloc version   : 4.0.3-0-ge9192eacf8935e29fc62fddc2701f7942b1cc02c
    221 library revision   : 2
    222 
    223 CONFIG             : --with-lg-quantum=3 --with-jemalloc-prefix=je_ --enable-cc-silence 'CFLAGS=-std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops ' LDFLAGS=
    224 CC                 : gcc
    225 CFLAGS             : -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -fvisibility=hidden
    226 CPPFLAGS           :  -D_GNU_SOURCE -D_REENTRANT
    227 LDFLAGS            : 
    228 EXTRA_LDFLAGS      : 
    229 LIBS               :  -lpthread
    230 TESTLIBS           : 
    231 RPATH_EXTRA        : 
    232 
    233 XSLTPROC           : /usr/bin/xsltproc
    234 XSLROOT            : 
    235 
    236 PREFIX             : /usr/local
    237 BINDIR             : /usr/local/bin
    238 DATADIR            : /usr/local/share
    239 INCLUDEDIR         : /usr/local/include
    240 LIBDIR             : /usr/local/lib
    241 MANDIR             : /usr/local/share/man
    242 
    243 srcroot            : 
    244 abs_srcroot        : /root/tools/redis-3.2.12/deps/jemalloc/
    245 objroot            : 
    246 abs_objroot        : /root/tools/redis-3.2.12/deps/jemalloc/
    247 
    248 JEMALLOC_PREFIX    : je_
    249 JEMALLOC_PRIVATE_NAMESPACE
    250                    : je_
    251 install_suffix     : 
    252 autogen            : 0
    253 cc-silence         : 1
    254 debug              : 0
    255 code-coverage      : 0
    256 stats              : 1
    257 prof               : 0
    258 prof-libunwind     : 0
    259 prof-libgcc        : 0
    260 prof-gcc           : 0
    261 tcache             : 1
    262 fill               : 1
    263 utrace             : 0
    264 valgrind           : 0
    265 xmalloc            : 0
    266 munmap             : 0
    267 lazy_lock          : 0
    268 tls                : 1
    269 cache-oblivious    : 1
    270 ===============================================================================
    271 cd jemalloc && make CFLAGS="-std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops " LDFLAGS="" lib/libjemalloc.a
    272 make[3]: Entering directory `/root/tools/redis-3.2.12/deps/jemalloc'
    273 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/jemalloc.o src/jemalloc.c
    274 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/arena.o src/arena.c
    275 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/atomic.o src/atomic.c
    276 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/base.o src/base.c
    277 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/bitmap.o src/bitmap.c
    278 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/chunk.o src/chunk.c
    279 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/chunk_dss.o src/chunk_dss.c
    280 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/chunk_mmap.o src/chunk_mmap.c
    281 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/ckh.o src/ckh.c
    282 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/ctl.o src/ctl.c
    283 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/extent.o src/extent.c
    284 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/hash.o src/hash.c
    285 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/huge.o src/huge.c
    286 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/mb.o src/mb.c
    287 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/mutex.o src/mutex.c
    288 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/pages.o src/pages.c
    289 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/prof.o src/prof.c
    290 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/quarantine.o src/quarantine.c
    291 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/rtree.o src/rtree.c
    292 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/stats.o src/stats.c
    293 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/tcache.o src/tcache.c
    294 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/util.o src/util.c
    295 gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops  -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/tsd.o src/tsd.c
    296 ar crus lib/libjemalloc.a src/jemalloc.o src/arena.o src/atomic.o src/base.o src/bitmap.o src/chunk.o src/chunk_dss.o src/chunk_mmap.o src/ckh.o src/ctl.o src/extent.o src/hash.o src/huge.o src/mb.o src/mutex.o src/pages.o src/prof.o src/quarantine.o src/rtree.o src/stats.o src/tcache.o src/util.o src/tsd.o
    297 make[3]: Leaving directory `/root/tools/redis-3.2.12/deps/jemalloc'
    298 make[2]: Leaving directory `/root/tools/redis-3.2.12/deps'
    299     CC adlist.o
    300     CC quicklist.o
    301     CC ae.o
    302     CC anet.o
    303     CC dict.o
    304     CC server.o
    305     CC sds.o
    306     CC zmalloc.o
    307     CC lzf_c.o
    308     CC lzf_d.o
    309     CC pqsort.o
    310     CC zipmap.o
    311     CC sha1.o
    312     CC ziplist.o
    313     CC release.o
    314     CC networking.o
    315     CC util.o
    316     CC object.o
    317     CC db.o
    318     CC replication.o
    319     CC rdb.o
    320     CC t_string.o
    321     CC t_list.o
    322     CC t_set.o
    323     CC t_zset.o
    324     CC t_hash.o
    325     CC config.o
    326     CC aof.o
    327     CC pubsub.o
    328     CC multi.o
    329     CC debug.o
    330     CC sort.o
    331     CC intset.o
    332     CC syncio.o
    333     CC cluster.o
    334     CC crc16.o
    335     CC endianconv.o
    336     CC slowlog.o
    337     CC scripting.o
    338     CC bio.o
    339     CC rio.o
    340     CC rand.o
    341     CC memtest.o
    342     CC crc64.o
    343     CC bitops.o
    344     CC sentinel.o
    345     CC notify.o
    346     CC setproctitle.o
    347     CC blocked.o
    348     CC hyperloglog.o
    349     CC latency.o
    350     CC sparkline.o
    351     CC redis-check-rdb.o
    352     CC geo.o
    353     LINK redis-server
    354     INSTALL redis-sentinel
    355     CC redis-cli.o
    356     LINK redis-cli
    357     CC redis-benchmark.o
    358     LINK redis-benchmark
    359     INSTALL redis-check-rdb
    360     CC redis-check-aof.o
    361     LINK redis-check-aof
    362 
    363 Hint: It's a good idea to run 'make test' ;)
    364 
    365 make[1]: Leaving directory `/root/tools/redis-3.2.12/src'
    366 [root@localhost redis-3.2.12]# 

    提示:“It's a good idea to run 'make test'”, 可以make test看看结果

    1 [root@localhost redis-3.2.12]# make test
    2 cd src && make test
    3 make[1]: Entering directory `/root/tools/redis-3.2.12/src'
    4 You need tcl 8.5 or newer in order to run the Redis test
    5 make[1]: *** [test] Error 1
    6 make[1]: Leaving directory `/root/tools/redis-3.2.12/src'
    7 make: *** [test] Error 2
    8 [root@localhost redis-3.2.12]# 

    提示cd src && make test,好我们就直接切换到目录src下执行make test

    1 [root@localhost redis-3.2.12]# cd src/
    2 [root@localhost src]# make test
    3 You need tcl 8.5 or newer in order to run the Redis test
    4 make: *** [test] Error 1
    5 [root@localhost src]# 

    提示需要tcl 8.5或者更高版本,这里我们先查看下该软件的具体名称版本

     1 [root@localhost ~]# yum provides tcl
     2 Loaded plugins: fastestmirror
     3 Loading mirror speeds from cached hostfile
     4  * base: mirrors.aliyun.com
     5  * extras: mirrors.aliyun.com
     6  * updates: mirrors.aliyun.com
     7 1:tcl-8.5.13-8.el7.i686 : Tool Command Language, pronounced tickle
     8 Repo        : base
     9 
    10 
    11 
    12 1:tcl-8.5.13-8.el7.x86_64 : Tool Command Language, pronounced tickle
    13 Repo        : base
    14 
    15 
    16 
    17 [root@localhost ~]# 
    18 [root@localhost src]# yum info tcl
    19 Loaded plugins: fastestmirror
    20 Loading mirror speeds from cached hostfile
    21  * base: mirrors.aliyun.com
    22  * extras: mirrors.aliyun.com
    23  * updates: mirrors.aliyun.com
    24 Available Packages
    25 Name        : tcl
    26 Arch        : i686
    27 Epoch       : 1
    28 Version     : 8.5.13
    29 Release     : 8.el7
    30 Size        : 1.9 M
    31 Repo        : base/7/x86_64
    32 Summary     : Tool Command Language, pronounced tickle
    33 URL         : http://tcl.sourceforge.net/
    34 License     : TCL
    35 Description : The Tcl (Tool Command Language) provides a powerful platform for
    36             : creating integration applications that tie together diverse
    37             : applications, protocols, devices, and frameworks. When paired with the
    38             : Tk toolkit, Tcl provides a fastest and powerful way to create
    39             : cross-platform GUI applications.  Tcl can also be used for a variety
    40             : of web-related tasks and for creating powerful command languages for
    41             : applications.
    42 
    43 Name        : tcl
    44 Arch        : x86_64
    45 Epoch       : 1
    46 Version     : 8.5.13
    47 Release     : 8.el7
    48 Size        : 1.9 M
    49 Repo        : base/7/x86_64
    50 Summary     : Tool Command Language, pronounced tickle
    51 URL         : http://tcl.sourceforge.net/
    52 License     : TCL
    53 Description : The Tcl (Tool Command Language) provides a powerful platform for
    54             : creating integration applications that tie together diverse
    55             : applications, protocols, devices, and frameworks. When paired with the
    56             : Tk toolkit, Tcl provides a fastest and powerful way to create
    57             : cross-platform GUI applications.  Tcl can also be used for a variety
    58             : of web-related tasks and for creating powerful command languages for
    59             : applications.
    60 
    61 [root@localhost src]#

    从上面发现当前最新的tcl版本时8.5.13,下面执行安装操作:

     1 [root@localhost src]# yum install tcl-8.5.13
     2 Loaded plugins: fastestmirror
     3 Loading mirror speeds from cached hostfile
     4  * base: mirrors.aliyun.com
     5  * extras: mirrors.aliyun.com
     6  * updates: mirrors.aliyun.com
     7 Resolving Dependencies
     8 --> Running transaction check
     9 ---> Package tcl.x86_64 1:8.5.13-8.el7 will be installed
    10 --> Finished Dependency Resolution
    11 
    12 Dependencies Resolved
    13 
    14 ========================================================================================================================================================================================================================================
    15  Package                                             Arch                                                   Version                                                          Repository                                            Size
    16 ========================================================================================================================================================================================================================================
    17 Installing:
    18  tcl                                                 x86_64                                                 1:8.5.13-8.el7                                                   base                                                 1.9 M
    19 
    20 Transaction Summary
    21 ========================================================================================================================================================================================================================================
    22 Install  1 Package
    23 
    24 Total download size: 1.9 M
    25 Installed size: 4.4 M
    26 Is this ok [y/d/N]: y
    27 Downloading packages:
    28 tcl-8.5.13-8.el7.x86_64.rpm                                                                                                                                                                                      | 1.9 MB  00:00:00     
    29 Running transaction check
    30 Running transaction test
    31 Transaction test succeeded
    32 Running transaction
    33   Installing : 1:tcl-8.5.13-8.el7.x86_64                                                                                                                                                                                            1/1 
    34   Verifying  : 1:tcl-8.5.13-8.el7.x86_64                                                                                                                                                                                            1/1 
    35 
    36 Installed:
    37   tcl.x86_64 1:8.5.13-8.el7                                                                                                                                                                                                             
    38 
    39 Complete!
    40 [root@localhost src]# 

    继续执行make test

     1 !!! WARNING The following tests failed:
     2 
     3 *** [err]: Slave should be able to synchronize with the master in tests/integration/replication-psync.tcl
     4 Replication not started.
     5 *** [err]: Cant' start the Redis server
     6 CONFIGURATION:notify-keyspace-events KEA
     7 daemonize no
     8 pidfile /var/run/redis.pid
     9 port 21224
    10 timeout 0
    11 bind 127.0.0.1
    12 loglevel verbose
    13 logfile ''
    14 databases 16
    15 latency-monitor-threshold 1
    16 save 60 10000
    17 rdbcompression yes
    18 dbfilename dump.rdb
    19 dir ./tests/tmp/server.9677.26
    20 slave-serve-stale-data yes
    21 appendonly yes
    22 appendfsync everysec
    23 no-appendfsync-on-rewrite no
    24 activerehashing yes
    25 ERROR:
    26 Cleanup: may take some time... OK
    27 make: *** [test] Error 1
    28 [root@localhost src]# 

    继续执行make PREEFIX path install

     1 [root@localhost src]# make PREFIX=/application/redis-3.2.12 install
     2 
     3 Hint: It's a good idea to run 'make test' ;)
     4 
     5     INSTALL install
     6     INSTALL install
     7     INSTALL install
     8     INSTALL install
     9     INSTALL install
    10 [root@localhost src]#
    11 [root@localhost src]# tree  /application/redis-3.2.12/
    12 /application/redis-3.2.12/
    13 └── bin
    14     ├── redis-benchmark
    15     ├── redis-check-aof
    16     ├── redis-check-rdb
    17     ├── redis-cli
    18     ├── redis-sentinel -> redis-server
    19     └── redis-server
    20 
    21 1 directory, 6 files
    22 [root@localhost src]# 

    创建软连接和配置文件目录,拷贝配置文件到指定路径

     1 [root@localhost src]# ln -sv /application/redis-3.2.12/ /application/redis
     2 ‘/application/redis’ -> ‘/application/redis-3.2.12/ 3 [root@localhost src]# echo 'vm.overcommit_memory = 1' >>/etc/sysctl.conf 
     4 [root@localhost src]# sysctl -p
     5 vm.overcommit_memory = 1
     6 [root@localhost src]# echo "export PATH=/application/redis/bin:$PATH" >>/etc/profile
     7 [root@localhost src]# source /etc/profile
     8 [root@localhost src]# mkdir -p /application/redis/conf
     9 [root@localhost src]# cd ..
    10 [root@localhost redis-3.2.12]# pwd
    11 /root/tools/redis-3.2.12
    12 [root@localhost redis-3.2.12]# cp redis.conf /application/redis/conf/
    13 [root@localhost redis-3.2.12]# 

    拷贝后目录结构如下:

     1 [root@localhost redis-3.2.12]# tree /application/redis
     2 /application/redis
     3 ├── bin
     4 │   ├── redis-benchmark
     5 │   ├── redis-check-aof
     6 │   ├── redis-check-rdb
     7 │   ├── redis-cli
     8 │   ├── redis-sentinel -> redis-server
     9 │   └── redis-server
    10 └── conf
    11     └── redis.conf
    12 
    13 2 directories, 7 files
    14 [root@localhost redis-3.2.12]# 

    根据README.md提示,启动redis直接使用命令:

    ./redis-server /path/to/redis.conf
    或者

    ./redis-server --port 9999 --slaveof 127.0.0.1 6379
    ./redis-server /etc/redis/6379.conf --loglevel debug

     1 [root@localhost redis]# /application/redis/bin/redis-server /application/redis/conf/redis.conf 
     2 13308:M 24 Jul 21:42:03.329 * Increased maximum number of open files to 10032 (it was originally set to 1024).
     3                 _._                                                  
     4            _.-``__ ''-._                                             
     5       _.-``    `.  `_.  ''-._           Redis 3.2.12 (00000000/0) 64 bit
     6   .-`` .-```.  ```/    _.,_ ''-._                                   
     7  (    '      ,       .-`  | `,    )     Running in standalone mode
     8  |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
     9  |    `-._   `._    /     _.-'    |     PID: 13308
    10   `-._    `-._  `-./  _.-'    _.-'                                   
    11  |`-._`-._    `-.__.-'    _.-'_.-'|                                  
    12  |    `-._`-._        _.-'_.-'    |           http://redis.io        
    13   `-._    `-._`-.__.-'_.-'    _.-'                                   
    14  |`-._`-._    `-.__.-'    _.-'_.-'|                                  
    15  |    `-._`-._        _.-'_.-'    |                                  
    16   `-._    `-._`-.__.-'_.-'    _.-'                                   
    17       `-._    `-.__.-'    _.-'                                       
    18           `-._        _.-'                                           
    19               `-.__.-'                                               
    20 
    21 13308:M 24 Jul 21:42:03.354 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    22 13308:M 24 Jul 21:42:03.354 # Server started, Redis version 3.2.12
    23 13308:M 24 Jul 21:42:03.354 # 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.
    24 13308:M 24 Jul 21:42:03.354 * The server is now ready to accept connections on port 6379

    查看启动状态:

    1 [root@localhost ~]# netstat -lnupt|grep redis
    2 tcp        0      0 127.0.0.1:21224         0.0.0.0:*               LISTEN      11906/src/redis-ser 
    3 tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      13308/redis-server  
    4 [root@localhost ~]# ps xua|grep redis
    5 root     11906  0.6  0.4 136920  7916 pts/3    Sl   21:10   0:13 src/redis-server 127.0.0.1:21224
    6 root     13308  0.4  0.4 136920  7920 pts/1    Sl+  21:42   0:00 /application/redis/bin/redis-server 127.0.0.1:6379
    7 root     13321  0.0  0.0 112648   952 pts/3    S+   21:43   0:00 grep --color=auto redis
    8 [root@localhost ~]# 

    redis监听端口本地6379,说明redis已经启动成功。
    以上启动都是直接在前台,即当前shell环境下,如果退出shell redis服务就直接退出,这对我们使用不是肯定不合理,redis配置文件有个选项直接将启动设置为daemon模式

    1 root@localhost conf]# cat redis.conf |grep "daemonize"
    2 # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
    3 daemonize no
    4 # When the server runs non daemonized, no pid file is created if none is
    5 # specified in the configuration. When the server is daemonized, the pid file
    6 # output for logging but daemonize, logs will be sent to /dev/null
    7 [root@localhost conf]# 

    修改该参数值yes后,启动

    1 [root@localhost redis]# /application/redis/bin/redis-server /application/redis/conf/redis.conf 
    2 [root@localhost redis]# 
    3 [root@localhost redis]# 
    4 [root@localhost redis]# ps xua|grep redis
    5 root     11906  0.6  0.4 136920  7916 pts/3    Sl   21:10   0:17 src/redis-server 127.0.0.1:21224
    6 root     13412  0.1  0.4 136920  7540 ?        Rsl  21:54   0:00 /application/redis/bin/redis-server 127.0.0.1:6379
    7 root     13416  0.0  0.0 112648   952 pts/1    R+   21:54   0:00 grep --color=auto redis
    8 [root@localhost redis]# 

    登陆redis服务:

     1 [root@localhost ~]# /application/redis/bin/redis-cli 
     2 127.0.0.1:6379> help
     3 redis-cli 3.2.12
     4 To get help about Redis commands type:
     5       "help @<group>" to get a list of commands in <group>
     6       "help <command>" for help on <command>
     7       "help <tab>" to get a list of possible help topics
     8       "quit" to exit
     9 
    10 To set redis-cli perferences:
    11       ":set hints" enable online hints
    12       ":set nohints" disable online hints
    13 Set your preferences in ~/.redisclirc
    14 127.0.0.1:6379> 

    客户端命令子命令通过--help即可显示

     1 [root@localhost ~]# /application/redis/bin/redis-cli --help
     2 redis-cli 3.2.12
     3 
     4 Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
     5   -h <hostname>      Server hostname (default: 127.0.0.1).
     6   -p <port>          Server port (default: 6379).
     7   -s <socket>        Server socket (overrides hostname and port).
     8   -a <password>      Password to use when connecting to the server.
     9   -r <repeat>        Execute specified command N times.
    10   -i <interval>      When -r is used, waits <interval> seconds per command.
    11                      It is possible to specify sub-second times like -i 0.1.
    12   -n <db>            Database number.
    13   -x                 Read last argument from STDIN.
    14   -d <delimiter>     Multi-bulk delimiter in for raw formatting (default: 
    ).
    15   -c                 Enable cluster mode (follow -ASK and -MOVED redirections).
    16   --raw              Use raw formatting for replies (default when STDOUT is
    17                      not a tty).
    18   --no-raw           Force formatted output even when STDOUT is not a tty.
    19   --csv              Output in CSV format.
    20   --stat             Print rolling stats about server: mem, clients, ...
    21   --latency          Enter a special mode continuously sampling latency.
    22   --latency-history  Like --latency but tracking latency changes over time.
    23                      Default time interval is 15 sec. Change it using -i.
    24   --latency-dist     Shows latency as a spectrum, requires xterm 256 colors.
    25                      Default time interval is 1 sec. Change it using -i.
    26   --lru-test <keys>  Simulate a cache workload with an 80-20 distribution.
    27   --slave            Simulate a slave showing commands received from the master.
    28   --rdb <filename>   Transfer an RDB dump from remote server to local file.
    29   --pipe             Transfer raw Redis protocol from stdin to server.
    30   --pipe-timeout <n> In --pipe mode, abort with error if after sending all data.
    31                      no reply is received within <n> seconds.
    32                      Default timeout: 30. Use 0 to wait forever.
    33   --bigkeys          Sample Redis keys looking for big keys.
    34   --scan             List all keys using the SCAN command.
    35   --pattern <pat>    Useful with --scan to specify a SCAN pattern.
    36   --intrinsic-latency <sec> Run a test to measure intrinsic system latency.
    37                      The test will run for the specified amount of seconds.
    38   --eval <file>      Send an EVAL command using the Lua script at <file>.
    39   --ldb              Used with --eval enable the Redis Lua debugger.
    40   --ldb-sync-mode    Like --ldb but uses the synchronous Lua debugger, in
    41                      this mode the server is blocked and script changes are
    42                      are not rolled back from the server memory.
    43   --help             Output this help and exit.
    44   --version          Output version and exit.
    45 
    46 Examples:
    47   cat /etc/passwd | redis-cli -x set mypasswd
    48   redis-cli get mypasswd
    49   redis-cli -r 100 lpush mylist x
    50   redis-cli -r 100 -i 1 info | grep used_memory_human:
    51   redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
    52   redis-cli --scan --pattern '*:12345*'
    53 
    54   (Note: when using --eval the comma separates KEYS[] from ARGV[] items)
    55 
    56 When no command is given, redis-cli starts in interactive mode.
    57 Type "help" in interactive mode for information on available commands
    58 and settings.
    59 
    60 [root@localhost ~]# 

    直接运行redis-cli 即可登陆到redis常用命令使用运行help command

     1 127.0.0.1:6379> help
     2 redis-cli 3.2.12
     3 To get help about Redis commands type:
     4       "help @<group>" to get a list of commands in <group>
     5       "help <command>" for help on <command>
     6       "help <tab>" to get a list of possible help topics
     7       "quit" to exit
     8 
     9 To set redis-cli perferences:
    10       ":set hints" enable online hints
    11       ":set nohints" disable online hints
    12 Set your preferences in ~/.redisclirc
    13 127.0.0.1:6379> help set
    14 
    15   SET key value [EX seconds] [PX milliseconds] [NX|XX]
    16   summary: Set the string value of a key
    17   since: 1.0.0
    18   group: string
    19 
    20 127.0.0.1:6379> help get
    21 
    22   GET key
    23   summary: Get the value of a key
    24   since: 1.0.0
    25   group: string
    26 
    27 127.0.0.1:6379>

    如果要查看所有信息运行info

      1 [root@localhost ~]# /application/redis/bin/redis-cli
      2 127.0.0.1:6379> info
      3 # Server
      4 redis_version:3.2.12
      5 redis_git_sha1:00000000
      6 redis_git_dirty:0
      7 redis_build_id:13a68ce18431225
      8 redis_mode:standalone
      9 os:Linux 3.10.0-327.el7.x86_64 x86_64
     10 arch_bits:64
     11 multiplexing_api:epoll
     12 gcc_version:4.8.5
     13 process_id:13412
     14 run_id:bc69db78d60419ec1b04bfd282d4bd29e9a3587d
     15 tcp_port:6379
     16 uptime_in_seconds:602
     17 uptime_in_days:0
     18 hz:10
     19 lru_clock:5757621
     20 executable:/application/redis/bin/redis-server
     21 config_file:/application/redis/conf/redis.conf
     22 
     23 # Clients
     24 connected_clients:1
     25 client_longest_output_list:0
     26 client_biggest_input_buf:0
     27 blocked_clients:0
     28 
     29 # Memory
     30 used_memory:822696
     31 used_memory_human:803.41K
     32 used_memory_rss:7720960
     33 used_memory_rss_human:7.36M
     34 used_memory_peak:822696
     35 used_memory_peak_human:803.41K
     36 total_system_memory:1921671168
     37 total_system_memory_human:1.79G
     38 used_memory_lua:37888
     39 used_memory_lua_human:37.00K
     40 maxmemory:0
     41 maxmemory_human:0B
     42 maxmemory_policy:noeviction
     43 mem_fragmentation_ratio:9.38
     44 mem_allocator:jemalloc-4.0.3
     45 
     46 # Persistence
     47 loading:0
     48 rdb_changes_since_last_save:0
     49 rdb_bgsave_in_progress:0
     50 rdb_last_save_time:1532483675
     51 rdb_last_bgsave_status:ok
     52 rdb_last_bgsave_time_sec:-1
     53 rdb_current_bgsave_time_sec:-1
     54 aof_enabled:0
     55 aof_rewrite_in_progress:0
     56 aof_rewrite_scheduled:0
     57 aof_last_rewrite_time_sec:-1
     58 aof_current_rewrite_time_sec:-1
     59 aof_last_bgrewrite_status:ok
     60 aof_last_write_status:ok
     61 
     62 # Stats
     63 total_connections_received:5
     64 total_commands_processed:4
     65 instantaneous_ops_per_sec:0
     66 total_net_input_bytes:162
     67 total_net_output_bytes:32084
     68 instantaneous_input_kbps:0.00
     69 instantaneous_output_kbps:0.00
     70 rejected_connections:0
     71 sync_full:0
     72 sync_partial_ok:0
     73 sync_partial_err:0
     74 expired_keys:0
     75 evicted_keys:0
     76 keyspace_hits:0
     77 keyspace_misses:0
     78 pubsub_channels:0
     79 pubsub_patterns:0
     80 latest_fork_usec:0
     81 migrate_cached_sockets:0
     82 
     83 # Replication
     84 role:master
     85 connected_slaves:0
     86 master_repl_offset:0
     87 repl_backlog_active:0
     88 repl_backlog_size:1048576
     89 repl_backlog_first_byte_offset:0
     90 repl_backlog_histlen:0
     91 
     92 # CPU
     93 used_cpu_sys:3.15
     94 used_cpu_user:0.10
     95 used_cpu_sys_children:0.00
     96 used_cpu_user_children:0.00
     97 
     98 # Cluster
     99 cluster_enabled:0
    100 
    101 # Keyspace
    102 127.0.0.1:6379>

    如果查看某一项信息可以通过info args,例如查看CPU、 Server、Clients等

     1 127.0.0.1:6379> info CPU
     2 # CPU
     3 used_cpu_sys:3.16
     4 used_cpu_user:0.10
     5 used_cpu_sys_children:0.00
     6 used_cpu_user_children:0.00
     7 127.0.0.1:6379> info Clients
     8 # Clients
     9 connected_clients:1
    10 client_longest_output_list:0
    11 client_biggest_input_buf:0
    12 blocked_clients:0
    13 127.0.0.1:6379> info Server
    14 # Server
    15 redis_version:3.2.12
    16 redis_git_sha1:00000000
    17 redis_git_dirty:0
    18 redis_build_id:13a68ce18431225
    19 redis_mode:standalone
    20 os:Linux 3.10.0-327.el7.x86_64 x86_64
    21 arch_bits:64
    22 multiplexing_api:epoll
    23 gcc_version:4.8.5
    24 process_id:13412
    25 run_id:bc69db78d60419ec1b04bfd282d4bd29e9a3587d
    26 tcp_port:6379
    27 uptime_in_seconds:642
    28 uptime_in_days:0
    29 hz:10
    30 lru_clock:5757661
    31 executable:/application/redis/bin/redis-server
    32 config_file:/application/redis/conf/redis.conf
    33 127.0.0.1:6379> info Clients
    34 # Clients
    35 connected_clients:1
    36 client_longest_output_list:0
    37 client_biggest_input_buf:0
    38 blocked_clients:0
    39 127.0.0.1:6379> 

    比如可以在命令行查看配置文件信息,可以使用CONFIG GET CONFIG_SETTING_NAME

     1 127.0.0.1:6379> CONFIG GET loglevel
     2 1) "loglevel"
     3 2) "notice"
     4 127.0.0.1:6379> 
     5 127.0.0.1:6379> CONFIG GET loglevel
     6 1) "loglevel"
     7 2) "notice"
     8 127.0.0.1:6379> CONFIG GET port
     9 1) "port"
    10 2) "6379"
    11 127.0.0.1:6379> CONFIG GET timeout
    12 1) "timeout"
    13 2) "0"
    14 127.0.0.1:6379> CONFIG GET pidfile
    15 1) "pidfile"
    16 2) "/var/run/redis_6379.pid"
    17 127.0.0.1:6379> 

    如果查看所有配置文件所有信息 CONFIG GET '*'

      1 127.0.0.1:6379> CONFIG GET *
      2   1) "dbfilename"
      3   2) "dump.rdb"
      4   3) "requirepass"
      5   4) ""
      6   5) "masterauth"
      7   6) ""
      8   7) "unixsocket"
      9   8) ""
     10   9) "logfile"
     11  10) ""
     12  11) "pidfile"
     13  12) "/var/run/redis_6379.pid"
     14  13) "slave-announce-ip"
     15  14) ""
     16  15) "maxmemory"
     17  16) "0"
     18  17) "maxmemory-samples"
     19  18) "5"
     20  19) "timeout"
     21  20) "0"
     22  21) "auto-aof-rewrite-percentage"
     23  22) "100"
     24  23) "auto-aof-rewrite-min-size"
     25  24) "67108864"
     26  25) "hash-max-ziplist-entries"
     27  26) "512"
     28  27) "hash-max-ziplist-value"
     29  28) "64"
     30  29) "list-max-ziplist-size"
     31  30) "-2"
     32  31) "list-compress-depth"
     33  32) "0"
     34  33) "set-max-intset-entries"
     35  34) "512"
     36  35) "zset-max-ziplist-entries"
     37  36) "128"
     38  37) "zset-max-ziplist-value"
     39  38) "64"
     40  39) "hll-sparse-max-bytes"
     41  40) "3000"
     42  41) "lua-time-limit"
     43  42) "5000"
     44  43) "slowlog-log-slower-than"
     45  44) "10000"
     46  45) "latency-monitor-threshold"
     47  46) "0"
     48  47) "slowlog-max-len"
     49  48) "128"
     50  49) "port"
     51  50) "6379"
     52  51) "tcp-backlog"
     53  52) "511"
     54  53) "databases"
     55  54) "16"
     56  55) "repl-ping-slave-period"
     57  56) "10"
     58  57) "repl-timeout"
     59  58) "60"
     60  59) "repl-backlog-size"
     61  60) "1048576"
     62  61) "repl-backlog-ttl"
     63  62) "3600"
     64  63) "maxclients"
     65  64) "10000"
     66  65) "watchdog-period"
     67  66) "0"
     68  67) "slave-priority"
     69  68) "100"
     70  69) "slave-announce-port"
     71  70) "0"
     72  71) "min-slaves-to-write"
     73  72) "0"
     74  73) "min-slaves-max-lag"
     75  74) "10"
     76  75) "hz"
     77  76) "10"
     78  77) "cluster-node-timeout"
     79  78) "15000"
     80  79) "cluster-migration-barrier"
     81  80) "1"
     82  81) "cluster-slave-validity-factor"
     83  82) "10"
     84  83) "repl-diskless-sync-delay"
     85  84) "5"
     86  85) "tcp-keepalive"
     87  86) "300"
     88  87) "cluster-require-full-coverage"
     89  88) "yes"
     90  89) "no-appendfsync-on-rewrite"
     91  90) "no"
     92  91) "slave-serve-stale-data"
     93  92) "yes"
     94  93) "slave-read-only"
     95  94) "yes"
     96  95) "stop-writes-on-bgsave-error"
     97  96) "yes"
     98  97) "daemonize"
     99  98) "yes"
    100  99) "rdbcompression"
    101 100) "yes"
    102 101) "rdbchecksum"
    103 102) "yes"
    104 103) "activerehashing"
    105 104) "yes"
    106 105) "protected-mode"
    107 106) "yes"
    108 107) "repl-disable-tcp-nodelay"
    109 108) "no"
    110 109) "repl-diskless-sync"
    111 110) "no"
    112 111) "aof-rewrite-incremental-fsync"
    113 112) "yes"
    114 113) "aof-load-truncated"
    115 114) "yes"
    116 115) "maxmemory-policy"
    117 116) "noeviction"
    118 117) "loglevel"
    119 118) "notice"
    120 119) "supervised"
    121 120) "no"
    122 121) "appendfsync"
    123 122) "everysec"
    124 123) "syslog-facility"
    125 124) "local0"
    126 125) "appendonly"
    127 126) "no"
    128 127) "dir"
    129 128) "/application/redis-3.2.12"
    130 129) "save"
    131 130) "900 1 300 10 60 10000"
    132 131) "client-output-buffer-limit"
    133 132) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
    134 133) "unixsocketperm"
    135 134) "0"
    136 135) "slaveof"
    137 136) ""
    138 137) "notify-keyspace-events"
    139 138) ""
    140 139) "bind"
    141 140) "127.0.0.1"
    142 127.0.0.1:6379> 

    redis操作:

    a、模拟写入数据:

    1 127.0.0.1:6379> set redis 3.2.12
    2 OK
    3 127.0.0.1:6379> get redis
    4 "3.2.12"
    5 127.0.0.1:6379> set  python 3.5.12
    6 OK
    7 127.0.0.1:6379> get python
    8 "3.5.12"
    9 127.0.0.1:6379> 

    b、删除数据

    1 127.0.0.1:6379> del redis
    2 (integer) 1
    3 127.0.0.1:6379> get redis
    4 (nil)
    5 127.0.0.1:6379> del python
    6 (integer) 1
    7 127.0.0.1:6379> get python
    8 (nil)
    9 127.0.0.1:6379> 

    redis主从复制

    假设当前主机redis为主,将配置文件中修改bind 127.0.0.1 为bind 192.168.112.140 127.0.0.1

    在另外一台主机上同样部署redis-3.2.12,配置文件同主redis,修改slaveof内容为: slaveof 192.168.112.140 6379

    1 [root@firewall-node01 conf]# cat redis.conf |grep slaveof
    2 # Master-Slave replication. Use slaveof to make a Redis instance a copy of
    3  slaveof 192.168.112.140 6379
    4 [root@firewall-node01 conf]# 

    启动redis服务:

     1 [root@firewall-node01 ~]# /application/redis/bin/redis-server /application/redis/conf/redis.conf 
     2 [root@firewall-node01 ~]# ps xua|grep redis
     3 root     11526  0.2  0.4 136920  7608 ?        Ssl  23:03   0:00 /application/redis/bin/redis-server 192.168.112.200:6379
     4 root     11530  0.0  0.0 112648   948 pts/1    S+   23:03   0:00 grep --color=auto redis
     5 [root@firewall-node01 ~]# netstat -lnupt
     6 Active Internet connections (only servers)
     7 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
     8 tcp        0      0 192.168.112.200:6379    0.0.0.0:*               LISTEN      11526/redis-server  
     9 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1157/sshd           
    10 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2281/master         
    11 tcp6       0      0 :::22                   :::*                    LISTEN      1157/sshd           
    12 tcp6       0      0 ::1:25                  :::*                    LISTEN      2281/master         
    13 [root@firewall-node01 ~]# 

    在主redis上模拟写入:

     1 127.0.0.1:6379> set redis 3.2.12
     2 OK
     3 127.0.0.1:6379> set centos 7.2.1511
     4 OK
     5 127.0.0.1:6379> set python 3.5.7
     6 OK
     7 127.0.0.1:6379> get redis
     8 "3.2.12"
     9 127.0.0.1:6379> get python
    10 "3.5.7"
    11 127.0.0.1:6379> get centos
    12 "7.2.1511"
    13 127.0.0.1:6379> 

    切换到从redis上查询:

    1 127.0.0.1:6379> get redis
    2 "3.2.12"
    3 127.0.0.1:6379> get python
    4 "3.5.7"
    5 127.0.0.1:6379> get centos
    6 "7.2.1511"
    7 127.0.0.1:6379> 

    模拟删除操作:

    主redis删除刚才写入的内容:

     1 127.0.0.1:6379> del redis
     2 (integer) 1
     3 127.0.0.1:6379> del python
     4 (integer) 1
     5 127.0.0.1:6379> del centos
     6 (integer) 1
     7 127.0.0.1:6379> get redis
     8 (nil)
     9 127.0.0.1:6379> get python
    10 (nil)
    11 127.0.0.1:6379> get centos
    12 (nil)
    13 127.0.0.1:6379> 

    从redis上查看:

    1 127.0.0.1:6379> 
    2 127.0.0.1:6379> 
    3 127.0.0.1:6379> get redis
    4 (nil)
    5 127.0.0.1:6379> get python
    6 (nil)
    7 127.0.0.1:6379> get centos
    8 (nil)
    9 127.0.0.1:6379> 

    如果想看更详细过程,我们可以在主从上分别开两个窗口监听,监听命令:redis-cli -h ip -p port monitor

    主redis上:

     1 [root@localhost ~]# redis-cli monitor 2 OK 

    从redis上

     1 [root@firewall-node01 ~]# redis-cli monitor
     2 OK
     3 1532488634.079511 [0 192.168.112.140:6379] "PING"
     4 1532488644.323362 [0 192.168.112.140:6379] "PING"
     5 1532488654.591374 [0 192.168.112.140:6379] "PING"
     6 1532488665.103119 [0 192.168.112.140:6379] "PING"
     7 1532488675.441193 [0 192.168.112.140:6379] "PING"
     8 1532488685.729128 [0 192.168.112.140:6379] "PING"
     9 1532488696.052144 [0 192.168.112.140:6379] "PING"
    10 1532488706.272656 [0 192.168.112.140:6379] "PING"
    11 1532488716.508952 [0 192.168.112.140:6379] "PING"
    12 1532488726.785865 [0 192.168.112.140:6379] "PING"
    13 1532488737.030902 [0 192.168.112.140:6379] "PING"
    14 1532488747.330386 [0 192.168.112.140:6379] "PING"
    15 1532488757.639611 [0 192.168.112.140:6379] "PING"
    16 1532488767.866261 [0 192.168.112.140:6379] "PING"
    17 1532488778.153609 [0 192.168.112.140:6379] "PING"
    18 1532488788.507588 [0 192.168.112.140:6379] "PING"
    19 1532488798.776813 [0 192.168.112.140:6379] "PING"

    在主redis执行添加内容操作

    1 127.0.0.1:6379> set web001 www.baidu.com
    2 OK
    3 127.0.0.1:6379> set web002 www.tmall.com
    4 OK
    5 127.0.0.1:6379> set web003 www.163.com
    6 OK
    7 127.0.0.1:6379> set web004 www.sina.com.cn
    8 OK
    9 127.0.0.1:6379> 

    主redis监控窗口:

    1 [root@localhost ~]# redis-cli monitor
    2 OK
    3 1532488868.015675 [0 127.0.0.1:60068] "set" "web001" "www.baidu.com"
    4 1532488877.247735 [0 127.0.0.1:60068] "set" "web002" "www.tmall.com"
    5 1532488887.446223 [0 127.0.0.1:60068] "set" "web003" "www.163.com"
    6 1532488897.523142 [0 127.0.0.1:60068] "set" "web004" "www.sina.com.cn"

    从redis上查看:

    1 127.0.0.1:6379> get web001
    2 "www.baidu.com"
    3 127.0.0.1:6379> get web002
    4 "www.tmall.com"
    5 127.0.0.1:6379> get web003
    6 "www.163.com"
    7 127.0.0.1:6379> get web004
    8 "www.sina.com.cn"
    9 127.0.0.1:6379> 

    监控界面内容:

     1 [root@firewall-node01 ~]# redis-cli monitor
     2 OK
     3 1532488634.079511 [0 192.168.112.140:6379] "PING"
     4 1532488644.323362 [0 192.168.112.140:6379] "PING"
     5 1532488654.591374 [0 192.168.112.140:6379] "PING"
     6 1532488665.103119 [0 192.168.112.140:6379] "PING"
     7 1532488675.441193 [0 192.168.112.140:6379] "PING"
     8 1532488685.729128 [0 192.168.112.140:6379] "PING"
     9 1532488696.052144 [0 192.168.112.140:6379] "PING"
    10 1532488706.272656 [0 192.168.112.140:6379] "PING"
    11 1532488716.508952 [0 192.168.112.140:6379] "PING"
    12 1532488726.785865 [0 192.168.112.140:6379] "PING"
    13 1532488737.030902 [0 192.168.112.140:6379] "PING"
    14 1532488747.330386 [0 192.168.112.140:6379] "PING"
    15 1532488757.639611 [0 192.168.112.140:6379] "PING"
    16 1532488767.866261 [0 192.168.112.140:6379] "PING"
    17 1532488778.153609 [0 192.168.112.140:6379] "PING"
    18 1532488788.507588 [0 192.168.112.140:6379] "PING"
    19 1532488798.776813 [0 192.168.112.140:6379] "PING"
    20 1532488809.066915 [0 192.168.112.140:6379] "PING"
    21 1532488819.414117 [0 192.168.112.140:6379] "PING"
    22 1532488829.743688 [0 192.168.112.140:6379] "PING"
    23 1532488840.054360 [0 192.168.112.140:6379] "PING"
    24 1532488849.729390 [0 192.168.112.140:6379] "set" "web001" "www.baidu.com"
    25 1532488850.251853 [0 192.168.112.140:6379] "PING"
    26 1532488858.961381 [0 192.168.112.140:6379] "set" "web002" "www.tmall.com"
    27 1532488860.463012 [0 192.168.112.140:6379] "PING"
    28 1532488869.159778 [0 192.168.112.140:6379] "set" "web003" "www.163.com"
    29 1532488870.850704 [0 192.168.112.140:6379] "PING"
    30 1532488879.237154 [0 192.168.112.140:6379] "set" "web004" "www.sina.com.cn"
    31 1532488881.098155 [0 192.168.112.140:6379] "PING"
    32 1532488891.272511 [0 192.168.112.140:6379] "PING"
    33 1532488901.528316 [0 192.168.112.140:6379] "PING"
    34 1532488912.010221 [0 192.168.112.140:6379] "PING"
    35 1532488922.381975 [0 192.168.112.140:6379] "PING"
    36 1532488931.274611 [0 127.0.0.1:42876] "get" "web01"
    37 1532488932.899151 [0 192.168.112.140:6379] "PING"
    38 1532488941.722834 [0 127.0.0.1:42876] "get" "web001"
    39 1532488943.583479 [0 192.168.112.140:6379] "PING"
    40 1532488944.538151 [0 127.0.0.1:42876] "get" "web002"
    41 1532488946.210489 [0 127.0.0.1:42876] "get" "web003"
    42 1532488948.482047 [0 127.0.0.1:42876] "get" "web004"
    43 1532488953.917618 [0 192.168.112.140:6379] "PING"
    44 1532488964.223460 [0 192.168.112.140:6379] "PING"
    45 1532488974.667318 [0 192.168.112.140:6379] "PING"

     未完待续............

  • 相关阅读:
    Core Api跨域问题解决
    文件夹浏览权限
    反射(C#基础回顾04)
    二维码扫码问题
    MVC接口跨域问题
    27.用户注册场景:数据验证(2):自定义验证tag、正则验证
    26.用户注册场景:数据验证(1):第三方验证库、自定义错误信息
    25.引入gorm,用户数据入库
    24.场景练习,基本接口(用户注册接口)
    22.使用Micro为我们的rpc服务创建http api网关
  • 原文地址:https://www.cnblogs.com/kindnull/p/9365035.html
Copyright © 2011-2022 走看看