redis紹介とデータ型


Redisの紹介
Redis官网:Redis.ioRedisはmemcachedと同様に、k-vデータストレージがより多くのvalueデータ型をサポートするものであり、stringに加えてhash、lists(チェーンテーブル)、sets(セット)、sorted sets(秩序セット)redisは、フルデータ(RDB)とインクリメンタルリクエスト(aof)の2つのファイルフォーマットを使用することをサポートする.フルデータフォーマットは、メモリ内のデータをディスクに書き込むことで、次回ファイルを読み込むときにロードしやすい.インクリメンタルリクエストは、mysql binlogredisのようなメモリをメモリストレージ、ディスクストレージ、logファイルの3つの部分に分けて、メモリ内のデータを操作リクエストにシーケンス化し、ファイルを読み取るときにreplayしてデータを得る
Redisインストール
公式サイトで最新のインストールパッケージをダウンロードして、インストールパッケージを解凍してインストールすることができます
[root@localhost src]# wget http://download.redis.io/releases/redis-5.0.0.tar.gz
--2018-11-11 21:00:34-- http://download.redis.io/releases/redis-5.0.0.tar.gz
Resolving download.redis.io... 109.74.203.151
Connecting to download.redis.io|109.74.203.151|:80... connected.
HTTP request sent, awaiting response... 200 OK
     make&&make install      ,         ,   ./configure    
[root@localhost redis-5.0.0]# make
cd src && make all
make[1]: Entering directory `/usr/local/src/redis-5.0.0/src'
    CC Makefile.dep
-----------------------------------  
[root@localhost redis-5.0.0]# make install
cd src && make install
make[1]: Entering directory `/usr/local/src/redis-5.0.0/src'
    CC Makefile.dep
make[1]: Leaving directory `/usr/local/src/redis-5.0.0/src'
make[1]: Entering directory `/usr/local/src/redis-5.0.0/src'
Hint: It's a good idea to run 'make test' ;)
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: Leaving directory `/usr/local/src/redis-5.0.0/src'
[root@localhost redis-5.0.0]# 

redisのインストールパスを表示し、解凍パッケージのパスの下でredisのプロファイルを/etc/ディレクトリにコピーし、プロファイルを変更します.ここでは、いくつかの構成項目の説明を例に挙げます.ほとんどの構成は変更する必要はありません.後でこれらの構成項目の役割の説明を見つけます.
[root@localhost redis-5.0.0]# which redis-cli 
/usr/local/bin/redis-cli
[root@localhost redis-5.0.0]# cp redis.conf /etc/redis.conf
[root@localhost redis-5.0.0]# vim /etc/redis.conf 
bind 127.0.0.1                    #redis     ip,      ,  ip      
protected-mode yes                #        
prot 6379                         #    
tcp-backlog 511                   #
timeout 0                         #
tcp-keepalive 300                 #
daemonize yes                     #   yes, no  redis         ,     redis     ,yes      redis       
supervised no                     #
pidfile /var/run/redis_6379.pid   #redis        pid  
loglevel notice                   #      
logfile "/var/log/redis.log"      #         ,redis           
databases 16                      #redis ,redis            ,    0  
always-show-log yes               #
save 9001                         #redis      
save 300 10                       #redis      
save 60 10000                     #redis      
stop-writes-on-bgsave-error yes   #
rdbcompression yes                #    RDB  
rdbchecksum yes                   #
dbfilename dump.rdb               #  RDB     
dir /data/redis                   #redis      ,      
replica-serve-stale-data yes      #
replica-read-only yes             #        
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no                    #  aof  ,yes    。 /data/redis       
appendfilename "appendonly.aof"  #  aof       
appendfsync everysec             #         
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

redisストレージディレクトリを作成し、redisを起動します.起動時にもカーネルにredisのカーネル構成を追加する必要があります.起動時にカーネル構成を有効にするには、/etc/rcが必要です.localにこれらの構成を追加してカーネルパラメータを変更します.カーネルパラメータを定義しない場合、redisは起動後のログでエラーを報告します.エラー情報、すなわちカーネルのヒントです.
[root@localhost /]# sysctl vm.overcommit_memory=1
vm.overcommit_memory = 1
[root@localhost /]# echo never > /sys/kernel/mm/transparent_hugepage/enabled 

カーネルパラメータ構成を/etc/rcに書き込む.localファイルで、起動時に有効にします
[root@localhost /]# vim /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled

redisを起動し、起動状態を表示します.構成で指定されているのは、このip、redisが6379ポートをリスニングすることです.
[root@localhost /]# redis-server /etc/redis.conf 
[root@localhost /]# ps aux |grep redis
root     18169  0.0  0.0 146336  4048 ?        Ssl  21:56   0:00 redis-server 127.0.0.1:6379 
root     18229  0.0  0.0 103388  2160 pts/1    S+   21:59   0:00 grep redis
[root@localhost /]# netstat -ntlp |grep redis
tcp        0      0 127.0.0.1:6379              0.0.0.0:*                   LISTEN      18169/redis-server 
``` 

# redis RDB AOF         
redis         ,RDB(Redis DataBase) AOF(Append Only File)       
RDB:    ,        , redis                      
AOF:              ,AOF    redis            ,   redis     ,                  ,         
RDB AOF           ,      ,  Redis    ,          AOF       ,    AOF           
           ,     RDB AOF      ,    ,redis           ,  memcached   
         /etc/redis.conf     ,  redis  redis-server+            redis

#####   redis    

[root@localhost/]# vim/etc/redis.conf#save""永続化をオンにしない場合はsave""アノテーションをオフにし、次の間隔で変更した構成アノテーションをオフにするとredisの永続化機能save 900 1#900秒に1回データ変更save 300 10#300秒に10回データ変更save 60 10000#60秒に1万回データ変更------appendfsync alwaysを省略変更するたびにハードディスクに記録されます.データストレージのセキュリティが高い.しかし、このようにredisは頻繁にディスクを読み書きし、ディスクIOが高くなるappendfsync everysecは毎秒ハードディスクに変更記録され、毎秒redisのデータをハードディスクに格納する.このモードは適切で、この同期モードをオンにすることを提案し、安全で効率的で適切なappendfsync noはディスクに書き込まれているが、これをオンにすると、redisはシステム自身のデータがディスクに書き込まれる頻度に応じてディスクに書き込まれる.しかし、redisストレージデータが不完全になる

# redis    
     redis,      redis     

[root@localhost/]# redis-cli 127.0.0.1:6379>
**string     **
string       , memcached  ,     key    value   。    memcached     , redis      ,             

127.0.0.1:6379> MSET k1 1 k2 2 k3 3OK127.0.0.1:6379> mget k1 k2 k31) "1"2) "2"3) "3"127.0.0.1:6379> mget k1 k2 1) "1"2) "2"127.0.0.1:6379> mget k1 k31) "1"2) "3"

**set    **
set          ,          ,         、            。    key       ,             。         follow          ,             。  redis             、  、     。              、    、       。          ,                                
set               , :

127.0.0.1:6379> SADD set1 a(integer) 1127.0.0.1:6379> SADD set1 2(integer) 1127.0.0.1:6379> SADD set1 3(integer) 1127.0.0.1:6379> SADD set1 4(integer) 1127.0.0.1:6379> SADD set1 e(integer) 1127.0.0.1:6379> SMEMBERS set11) "4"2) "3"3) "2"4) "a"5) "e"
             ,             ,               。 :

127.0.0.1:6379> SMEMBERS set11) "2"2) "3"3) "4"4) "a"5) "e"127.0.0.1:6379> SMEMBERS set21) "1"2) "2"3) "3"127.0.0.1:6379> SINTER set1 set21) "2"2) "3"
         ,               ,              。 :

127.0.0.1:6379>SUION set 1 set 2#set 1とset 2の集合は、上で求めた交差の中で同じデータです1)「2」2)「3」3)「4」4)「a」5)「1」6)「e」
set      ,              ,                    ,         。  :

127.0.0.1:6379> SMEMBERS set11) "2"2) "3"3) "4"4) "a"5) "e"127.0.0.1:6379> SMEMBERS set21) "1"2) "2"3) "3"127.0.0.1:6379> SDIFF set1 set21) "4"2) "e"3) "a"127.0.0.1:6379> SDIFF set2 set11) "1"
            , :

127.0.0.1:6379> SMEMBERS set11) "2"2) "3"3) "4"4) "a"5) "e"127.0.0.1:6379> SREM set1 e(integer) 1127.0.0.1:6379> SMEMBERS set11) "2"2) "3"3) "4"4) "a"
**sort set    (    )**
sorted set     。 set        score,            score      。           sorted sets,    value      。 score     ,          ,              
           ,              

127.0.0.1:6379>ZADD set 1「asd」(integer)117.0.0.1:6379>zaddset 1「123」(integer)117.0.0.1:6379>zaddset 1「dds 234」(integer)11217.0.0.1:6379>ZADDset 1「123 abc」(integer)1121217.0.0.1:6379>ZADDset 1「123 abc」(integer)11217.0.0.1:6379>ZRANGGEset 0-1#集約順出力1)「123」2)「123 abc」3)「asd」4)「dds 234」127.0.0.1:6379>79>79>ZRANGGEset 0-1#集約順順出力1)「123」1)「123」2)「123 abc」3)「asd」4)「dds 234」ZREVRANGE set 0-1#コレクション逆順出力1)「dds 234」2)「asd」3)「123 abc」4)「123」

**hash    **
 memcached 。                hashmap,                   (   json     ),       、  、    
     hash                        ,  :

127.0.0.1:6379> hset hash2 name xiaoming(integer) 1127.0.0.1:6379> hget hash2 name"xiaoming"127.0.0.1:6379> hset hash2 age 20(integer) 1127.0.0.1:6379> hget hash2 age"20"127.0.0.1:6379> hgetall hash21) "name"2) "xiaoming"3) "age"4) "20"