Redisの1つのインストールと5つのデータ型の使用
23777 ワード
1.redisのインストール
1.1インストール
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
tar xzf redis-5.0.2.tar.gz
cd redis-5.0.2
make
1.2 redisのプロファイルのバックアップ
> opt
cd /opt
> myredisconf
mkdir myredisconf
> redis
cd /opt/redis-5.0.2
> myredisconf
cp ./redis.conf ../myredisconf
1.3 redisバックアップ後のプロファイルの変更
vim /opt/myredisconf/redis.conf
daemonize no yes
################################ GENERAL #####################################
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes
1.4 redisのサービスを開始する
redis src
cd /opt/redis-5.0.2/src
redis
./redis-server /opt/myredisconf/redis.conf
8347:C 11 Dec 2018 16:36:52.716 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8347:C 11 Dec 2018 16:36:52.716 # Redis version=5.0.2, bits=64, commit=00000000, modified=0, pid=8347, just started
8347:C 11 Dec 2018 16:36:52.716 # Configuration loaded
redis , 6379, -p
./redis-cli -p 6379
redis
127.0.0.1:6379>
:ping
redis PONG
set k1 helloworld
get k1
“helloworld”
select
1.5 redis性能テスト
redisサーバを起動し、redisインストールディレクトリに切り替え、redis-benchmarkを実行するとテスト読み書き速度が表示されます.
2.redis起動後のその他の基礎知識
現在のライブラリのkey数の表示
現在のライブラリのすべてのキーがリストされ、keysは正規クエリーをサポートします.たとえば、
keys k?
はアルファベットk付きキーをクエリーします.keys[0-9]*は、頭文字が数字のすべてのkeyであることをクエリーします.
すべてのライブラリを空にします(使用しないでください!)
現在のライブラリを空にします(使用しないでください!)
redis統合パスワード管理、16ライブラリのパスワードは使用しないか、同じか
3.redis五大データ型
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
redisは、データベース、キャッシュ、およびメッセージエージェントとして使用できるメモリデータ構造メモリです.彼がサポートするデータ型は
3.0 redisキー操作(key)
その他のコマンド
redis :http://redisdoc.com/
3.1 String型
Stringはredisの最も基本的なタイプであり、memcacheにそっくりのタイプと理解でき、1つのkeyは1つのvalueに対応する.
Stringタイプのバイナリは安全で、redisのStringは任意のデータを含むことができることを意味します.例えばjpgのピクチャやシーケンス化されたオブジェクトでは、1つのredisにおける文字列valueは最大512 Mであってもよい.
文字列操作命令:
incr key:
decr key:
incrby key:
decrby key:
, :
getrange k1 0 3
key value , key seconds 。
key , SETEX 。
SETEX :
SET key value
EXPIRE key seconds #
SETEX SETEX (atomic) , , SETEX 。
SETEX `SETEX` (atomic) , , `SETEX` 。
1 , 0 。
:
redis> EXISTS job # job
(integer) 0
redis> SETNX job "programmer" # job
(integer) 1
。
, MSET , , MSETNX , 。
MSET OK 。
:
redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
OK
。
, , nil 。
:
MGET , 。
:
redis> MGET redis mongodb
1) "redis.com"
2) "mongodb.org"
, 。
, MSETNX 。
MSETNX (atomic) , , , 。
:
, 1 ; , 0 。
:
MSETNX :
MSETNX k1 "MySQL" k2 "MongoDB" k3 "redis"
:
redis> MSETNX rmdbs "Sqlite" language "python" # rmdbs ,
(integer) 0
3.2 Listリスト
redisリストは簡単な文字列リストで、挿入順に並べて、リストのヘッダー(左)または末尾(右)に要素を追加できます.その下部は実際にチェーンテーブルです.
: value key
: value , value : , mylist LPUSH mylist a b c , c b a , LPUSH mylist a 、 LPUSH mylist b LPUSH mylist c 。
key , LPUSH 。
key , 。
:
LPUSH , 。
:
redis> lpush mylist a b c d a #
redis> LRANGE mylist 0 -1
“a”
"b"
"c"
"d"
"a"
: value key , key 。 。
LPUSH key value [value …] , key , LPUSHX 。
:
# LPUSHX
redis> LPUSHX greet "hello" # LPUSHX, ,
(integer) 0
# LPUSHX
redis> LPUSHX greet "good morning" # LPUSHX
(integer) 2
: value key ( )。
: value , value : mylist RPUSH mylist a b c , a b c , RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
key , RPUSH
key , 。
:
RPUSH , 。
:
redis> RPUSH mylist a b c
(integer) 3
redis> LRANGE mylist 0 -1
1) "a"
2) "b"
3) "c"
: key
:
。 key , nil 。
: ,
redis> RPUSH mylist a b c
(integer) 3
redis>lpop mylist
"a"
: key 。
:
。 key , nil 。
: ,
redis> RPUSH mylist a b c d
(integer) 3
redis>rpop mylist
"d"
: key , index 。
: (index) start stop 0 , , 0 , 1 , 。
, -1 , -2 , 。 key , 。
: index 。 index (out of range), nil
:
redis> lpush mylist 1 2 3 4 5
redis> lrange mylist 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
redis> lindex mylist 1
"4"
: key 。
: key , key , 0
key , 。
: key 。
:
redis> llen mylist
(integer) 5
: count , value 。
:count :
count > 0 : , value , count 。
count < 0 : , value , count 。
count = 0 : value 。
: 。 key (empty list), key , LREM 0 。
:
redis> lrange mylist 0 -1
1) "3"
2) "2"
3) "2"
4) "2"
5) "5"
6) "4"
7) "3"
8) "2"
9) "1"
redis> lrem mylist 2 2 # 2 mylist 2
(integer) 2
redis> lrange mylist 0 -1
1) "3"
2) "2"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
: (trim), , , 。
: , LTRIM list 0 2 , list , 。 (index) start stop 0 。 , -1 ,-2 。
:
key ,
, ok 。
:
。
start end ( LLEN list 1 ) , start > stop , LTRIM ( LTRIM )。
stop end ,Redis stop end 。
:
redis> lpush mylist 1 2 3 4 5 6
redis> lrange mylist 0 -1
1) "8"
2) "7"
3) "6"
4) "5"
5) "4"
6) "3"
7) "2"
8) "1"
redis> LTRIM mylist 0 4 # 0-4
OK
redis> lrange mylist 0 -1
1) "8"
2) "7"
3) "6"
4) "5"
5) "4"
redis> ltrim mylist 0 10086 # stop end , stop=end 。
redis> lrange mylist 0 -1 #
1) "8"
2) "7"
3) "6"
4) "5"
5) "4"
redis> ltrim mylist 10086 4 #start > end
redis> lrange mylist 0 -1
(empty list or set)
:
source ( ) , 。
source destination , destination
:
source , nil , 。
source destination , , , (rotation) 。
: 。
:
redis> lpush mylist 1 2 3 4 5
redis> lrange mylist 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
redis> rpoplpush mylist deslist # mylist deslist
1) "1"
redis> lrange deslist 0 -1
1) "1"
: key index value 。
index , ( key ) LSET , 。
:
ok , 。
:
redis> lpush mylist 1 2 3 4 5
(integer) 5
redis> lrange mylist 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
redis> lset mylist 2 7 # 2 7
OK
redis> lrange mylist 0 -1
1) "5"
2) "4"
3) "7"
4) "2"
5) "1"
: value key , pivot 。
pivot key , 。
key , key , 。
key , 。
:
, , 。 pivot , -1 。 key , 0 。
:
redis> lpush mylist js is the best language
(integer) 5
redis> lrange mylist 0 -1
1) "language"
2) "best"
3) "the"
4) "is"
5) "js"
redis> linsert mylist before js java # js java
(integer) 6
redis> lrange mylist 0 -1
1) "language"
2) "best"
3) "the"
4) "is"
5) "java"
6) "js"
まとめ:
彼は文字列のリストで、left、rightはすべて挿入/追加することができます
キーが存在しない場合は、心得チェーンテーブルを作成します.
キーが既に存在する場合は、新しい内容を追加します.
値がすべて削除されると、対応するキーも消えます.
チェーンテーブルの操作はヘッドでもテールでも効率が高いが,中間要素を操作すると効率が惨めになる.
3.3 Setコレクション
redisのsetはstringタイプの不要な集合である.HashTableによって実現されています.
: member key , member 。
key , member 。
key , 。
:
, 。
:
redis> sadd set01 hello world hello
(integer) 2
redis> smembers set01
1) "world"
2) "hello"
: key 。
key 。
:
。
:
redis> SADD language Ruby Python Clojure
(integer) 3
redis> SMEMBERS language
1) "Python"
2) "Ruby"
3) "Clojure"
: member key 。
:
member , 1 。 member , key , 0 。
:
redis> sismember set01 hello
(integer) 1
: key ( )。
:
。 key , 0 。
:
redis> scard set01
(integer) 2
: key member , member 。
key , 。
: , 。
:
redis> SMEMBERS set01
1) "hello"
2) "world"
redis> srem set01 hello
(integer) 1
redis> SMEMBERS set01
1) "world"
: , key , 。
: Redis 2.6 , SRANDMEMBER count :
count , , count , 。 count , 。
count , , , count 。
SPOP key , SPOP key , SRANDMEMBER , 。
:
key , ; , nil 。 count , ; , 。
:
127.0.0.1:6379> sadd set02 hello is anybody here me
(integer) 5
redis> SRANDMEMBER set02 3
1) "hello"
2) "me"
3) "anybody"
redis> SRANDMEMBER set02 3
1) "hello"
2) "me"
3) "anybody"
redis> SRANDMEMBER set02 3
1) "is"
2) "me"
3) "anybody"
: 。
: 。 key key , nil 。
:5.x pop
redis> SMEMBERS set02
1) "is"
2) "here"
3) "anybody"
4) "hello"
5) "me"
redis> spop set02
"here"
redis> spop set02 2
1) "anybody"
2) "is"
redis> SMEMBERS set02
1) "hello"
2) "me"
: member source destination 。
:
source member , SMOVE , 0 。 , member source , destination 。
destination member , SMOVE source member 。
:
member , 1 。 member source , destination , 0 。
:
redis> SMEMBERS set01
1) "are"
2) "you"
3) "world"
redis> SMEMBERS set02
1) "x"
2) "y"
3) "z"
redis> smove set01 set02 world
(integer) 1
redis> SMEMBERS set02
1) "z"
2) "y"
3) "world"
4) "x"
数学の集合クラス:
: , 。 key
: 。
:
redis> sadd set01 1 2 3 4 5 x y
(integer) 7
redis> sadd set02 1 2 3 4 a b c
(integer) 7
redis> sdiff set01 set02
1) "y"
2) "x"
3) "5"
: , 。
key 。
, ( )。
: 。
:
redis> sadd set01 1 2 3 4 5 x y
(integer) 7
redis> sadd set02 1 2 3 4 a b c
(integer) 7
redis> sinter set01 set02
1) "2"
2) "3"
3) "1"
4) "4"
: , 。
key 。
: 。
:
redis> sadd set01 1 2 3 4 5 x y
(integer) 7
redis> sadd set02 1 2 3 4 a b c
(integer) 7
redis> SUNION set01 set02
1) "y"
2) "3"
3) "1"
4) "c"
5) "4"
6) "x"
7) "5"
8) "2"
9) "a"
10) "b"
3.4 Hash
Javaの中のMapに似ています
: hash field value 。
, HSET 。
field , value 。
:
HSET field , 1 ; field , HSET , 0 。
:
redis> hset user id 001
(integer) 1
redis> hget user id
"001"
: 。
:
HGET 。
, , nil 。
:
redis> hget user id
"001"
: field , value 。
, 。
hash , HSETNX 。
:
HSETNX 1 , 0 。
:
#
redis> HSETNX database name Redis
(integer) 0
redis> HGET database name
"Redis"
#
redis> HSETNX database name Riak
(integer) 0
redis> HGET database name
"Redis"
: field-value ( - ) key 。
。
key , HMSET 。
:
, OK 。
key (hash) , 。
:
redis> hmset customer id 01 name zhangsan sex male
OK
redis> hmget customer id name sex
1) "01"
2) "zhangsan"
3) "male"
: key , 。
, (field name) (value), 。
: 。
key , 。
:
redis> hgetall customer
1) "id"
2) "01"
3) "name"
4) "zhangsan"
5) "sex"
6) "male"
: key 。
: 。
key , 0 。
:
redis> hgetall customer
1) "id"
2) "01"
3) "name"
4) "zhangsan"
5) "sex"
6) "male"
redis> hlen customer
(integer) 3
: field hash 。
:
HEXISTS 1 , 0 。
:
redis> HEXISTS customer name
(integer) 1
: key 。
: 。
key , 。
:
redis> hkeys customer
1) "id"
2) "name"
3) "sex"
: key 。
:
。
key , 。
:
redis> hvals customer
1) "01"
2) "zhangsan"
3) "male"
: key field increment 。 , 。 key , HINCRBY 。 HINCRBY 。
: HINCRBY , key field 。
:
redis> hgetall customer
1) "id"
2) "01"
3) "name"
4) "zhangsan"
5) "sex"
6) "male"
7) "age"
8) "19"
redis> hincrby customer age 1
(integer) 20
: key field increment 。
field , HINCRBYFLOAT field 0 , 。 key , HINCRBYFLOAT , field , 。
: field 。
:
redis> HINCRBYFLOAT customer age 0.5
"20.5"
3.5 Zset秩序集合(sorted set)
redis zsetは、カラーマップと同様にStringタイプの要素の集合であり、重複は許されない.
異なるのは、各要素がdoubleタイプのスコアに関連付けられていることです.
redisは、集合内のメンバーをスコアで小さいものから大きいものに並べ替えるものです.zsetのメンバーは一意ですが、スコア(score)は繰り返すことができます.
: member score key 。
member , member score , member , member 。
score 。
:
, 、 。
:
redis> zadd page_rank 20 baidu.com 30 google.com 40 tencent.com
(integer) 3
: key , 。
score ( ) 。
score (lexicographical order ) 。
start stop 0 , , 0 , 1 , 。 , -1 , -2 , 。
: , score ( ) 。
:
redis> zrange page_rank 0 -1
1) "baidu.com"
2) "google.com"
3) "tencent.com"
redis> zrange page_rank 0 -1 withscores
1) "baidu.com"
2) "20"
3) "google.com"
4) "30"
5) "tencent.com"
6) "40"
: key , score min max ( min max ) 。 score ( )
> LIMIT ( SQL SELECT LIMIT offset, count )
> WITHSCORES , score 。
:
min max -inf +inf , , score , ZRANGEBYSCORE 。
, ( ), ( ( ), :ZRANGEBYSCORE zset (1 5
: , score ( ) 。
:
# <=30
redis> zrangebyscore page_rank -inf 30 withscores
1) "baidu.com"
2) "20"
3) "google.com"
4) "30"
#
redis> zrangebyscore page_rank -inf +inf
1) "baidu.com"
2) "google.com"
3) "tencent.com"
# >20 <=40
27.0.0.1:6379> zrangebyscore page_rank (20 40 withscores
1) "google.com"
2) "30"
3) "tencent.com"
4) "40"
: key , 。
key , 。
: , 。
:
#
redis> zrem page_rank baidu.com
(integer) 1
#
redis> ZREM page_rank baidu.com bing.com
(integer) 2
: key 。
:
key , 。 key , 0
:
redis> zcard page_rank
(integer) 2
: key , score min max ( score min max ) 。
score min max 。
:
redis> zadd zset01 10 hello 20 world 30 im 40 jack 50 haha
(integer) 5
redis> zcount zset01 10 30
(integer) 3
: key member 。 score ( ) 。
0 , , score 0 。
:
member key , member 。 member key , nil 。
:
redis> zrange zset01 0 -1
1) "hello"
2) "world"
3) "im"
4) "jack"
5) "haha"
redis> zrank zset01 jack # 0
(integer) 3
: key , member score 。
member key , key , nil 。
:
member score , 。
:
redis> zrange zset01 0 -1 withscores
1) "hello"
2) "10"
3) "world"
4) "20"
5) "im"
6) "30"
7) "jack"
8) "40"
9) "haha"
10) "50"
redis> zscore zset01 im
"30"
: key , 。
score ( ) 。 score 。(reverse lexicographical order)
:
, score ( ) 。
:
redis> zrevrange zset01 0 -1 withscores
1) "haha"
2) "50"
3) "jack"
4) "40"
5) "im"
6) "30"
7) "world"
8) "20"
9) "hello"
10) "10"
: key , score max min ( max min ) 。 score ( ) 。
score (reverse lexicographical order ) 。
:
, score ( ) 。
:
redis> ZREVRANGEBYSCORE zset01 50 20 withscores
1) "haha"
2) "50"
3) "jack"
4) "40"
5) "im"
6) "30"
7) "world"
8) "20"