第二節、Redis
7952 ワード
Redis作用
Redisはnosqlの非関係型データベースであり、一般的にlinuxシステムに配備され、データはメモリに保存されるとともに、Redisはメモリデータを定期的にディスクに同期することができ、多種の言語のAPIインタフェースを提供し、データを持続化することができ、操作も比較的便利であり、key-valueのキー値対応データベースredisデータベースコマンドは大文字と小文字を区別しないことが理解できる.でもkeyとvalueは区別に注意
Redisのインストール
烏班図システムを例にとると、ソースを更新してから直接インストールすればよい.
redisポート6379プロファイル
操作Redis
Redisを操作する方法は2つありますクライアントredis-cliを直接使用 python、javaなどのアセンブリ言語呼び出し Redisの5つの基本データ型string文字列 listリスト hashハッシュ set集合 sorted sets秩序集合 redisにおける文字列の関連操作
redisのリストリスト関連アクション
redisにおけるハッシュhash関連動作
jsonのフォーマット
redis内の集合set関連操作
redisにおける秩序化集合zset関連操作
Redisのパブリケーションとサブスクリプション
メッセージのパブリケーションは、通常、同じサーバ上の複数のユーザに対して行われる.例えば、3人のユーザが同時にxshellを介して同じサーバをリモートで開くredisユーザは、他のユーザがこのチャネルでpublishをパブリッシュするメッセージを受信するためにsubscribeチャネル番号を購読する必要があり、購読側はリアルタイムでメッセージを受信する
python呼び出しredisredisパスワード制限操作の設定 python呼び出し pychamの項目で設定し、vmwork stationでポート転送を設定し、仮想マシンの6379ポートを4567に転送します.pythonがリモート仮想マシン環境を使用している場合はポート転送を必要としません
Redisはnosqlの非関係型データベースであり、一般的にlinuxシステムに配備され、データはメモリに保存されるとともに、Redisはメモリデータを定期的にディスクに同期することができ、多種の言語のAPIインタフェースを提供し、データを持続化することができ、操作も比較的便利であり、key-valueのキー値対応データベースredisデータベースコマンドは大文字と小文字を区別しないことが理解できる.でもkeyとvalueは区別に注意
Redisのインストール
烏班図システムを例にとると、ソースを更新してから直接インストールすればよい.
pyvip@vip:~$ sudo apt-get update
pyvip@vip:~$ sudo apt-get -y install redis-server
redisポート6379プロファイル
/etc/redis/redis.conf
を使用してプロファイルを変更pyvip@vip:~$ sudo vim /etc/redis/redis.conf
42 daemonize yes
# yes
46 pidfile /var/run/redis/redis-server.pid
# pid , redis , pid
50 port 6379
# ,
69 bind 127.0.0.1
# redis IP , redis, 0.0.0.0,127.0.0.1
操作Redis
Redisを操作する方法は2つあります
#
pyvip@vip:~$ redis-cli
127.0.0.1:6379> exit
#
pyvip@vip:~$ redis-cli -h 192.168.X.X -p 6379
# key :set key value,key , , , ( )
127.0.0.1:6379> set name 'hello allan'
OK
# key value, :get key
127.0.0.1:6379> get name
"hello allan"
# key
#key :expire key seconds
127.0.0.1:6379> expire name 30
(integer) 1
# , key nil
127.0.0.1:6379> ttl name
(integer) 26
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name
(nil)
# key , :set key value ex seconds
127.0.0.1:6379> set na "hell word" ex 60
OK
127.0.0.1:6379> ttl na
(integer) 54
127.0.0.1:6379> get na
"hell word"
# key :append key value, integer
127.0.0.1:6379> append name "lili"
(integer) 9
127.0.0.1:6379> get name
"allanlili"
# key key,mset,mget
127.0.0.1:6379> mset username "alex" passwd "qwer"
OK
127.0.0.1:6379> mget username passwd
1) "alex"
2) "qwer"
# key
127.0.0.1:6379> keys *
1) "passwd"
2) "username"
3) "name"
# key , :exists key
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists nb
(integer) 0
# key :del key
127.0.0.1:6379> del name
(integer) 1
# :type key
127.0.0.1:6379> type passwd
string
# key 1,
127.0.0.1:6379> set rc 1
OK
127.0.0.1:6379> incr rc
(integer) 2
127.0.0.1:6379> incr rc
(integer) 3
127.0.0.1:6379> decr rc
(integer) 2
127.0.0.1:6379> get rc
"2"
# :incrby/decrby key
127.0.0.1:6379> incrby rc 100
(integer) 102
127.0.0.1:6379> decrby rc 50
(integer) 52
127.0.0.1:6379> get rc
"52"
redisのリストリスト関連アクション
# lpush
# rpsuh
# lrange , ( )
# lindex key index
127.0.0.1:6379> rpush my_list 1 2 3
(integer) 3
127.0.0.1:6379> lpush my_list 4 5 6
(integer) 6
127.0.0.1:6379> type my_list
list
127.0.0.1:6379> lrange my_list 0 -1
1) "6"
2) "5"
3) "4"
4) "1"
5) "2"
6) "3"
127.0.0.1:6379> lrange my_list 0 0
1) "6"
127.0.0.1:6379> lrange my_list 0 1
1) "6"
2) "5"
127.0.0.1:6379> lindex my_list 1
"5"
# llen
127.0.0.1:6379> llen my_list
(integer) 6
# lpop
# rpop
# lrem
lrem key count value
count>0 count
count<0 count
count=0
127.0.0.1:6379> lrem key 0 5
# 5
127.0.0.1:6379> lrem key 2 5
# 2 5
redisにおけるハッシュhash関連動作
jsonのフォーマット
# hset :hset key filed value
# gset
# hdel
# hmset
127.0.0.1:6379> hset user username allan
(integer) 1
127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379> type user
hash
127.0.0.1:6379> hget user username
"allan"
#
127.0.0.1:6379> hgetall user
1) "username"
2) "allan"
3) "age"
4) "18"
# filed,hkeys
# value,hvals
# filed ,hlen
127.0.0.1:6379> hmset web baidu baidu.com qq qq.com
OK
127.0.0.1:6379> hkeys web
1) "baidu"
2) "qq"
127.0.0.1:6379> hvals web
1) "baidu.com"
2) "qq.com"
127.0.0.1:6379> hlen web
(integer) 2
127.0.0.1:6379> hmget web baidu qq
1) "baidu.com"
2) "qq.com"
redis内の集合set関連操作
# sadd key value value
# smembers key
127.0.0.1:6379> sadd mset 1 1 1
(integer) 1
127.0.0.1:6379> sadd mset 2 4 5
(integer) 3
127.0.0.1:6379> smembers mset
1) "1"
2) "2"
3) "4"
4) "5"
# spop key
# srem key member
127.0.0.1:6379> srem mset 1
(integer) 1
127.0.0.1:6379> spop mset
"4"
127.0.0.1:6379> smembers mset
1) "2"
2) "5"
# smove oldkey newkey value
# sinter key1 key2
# sunion key1 key2
# sdiff key1 key2
# sismember key value
# scard key
# srandmember key
redisにおける秩序化集合zset関連操作
# zadd key score member :
# zrange key start stop
# zrevrange key start stop
127.0.0.1:6379> zadd nset 100 z 50 a 1 h
(integer) 3
127.0.0.1:6379> type nset
zset
127.0.0.1:6379> zrange nset 0 -1
1) "h"
2) "a"
3) "z"
127.0.0.1:6379> zrevrange nset 0 -1
1) "z"
2) "a"
3) "h"
# zrem key member
# zrank key member
# zrevrank key member
127.0.0.1:6379> zrevrank nset z
(integer) 0
127.0.0.1:6379> zrank nset z
(integer) 2
# zcard key
127.0.0.1:6379> zcard nset
(integer) 3
# zscore key member
127.0.0.1:6379> zscore nset z
"100"
# ( ) zcount key min max
127.0.0.1:6379> zcount nset 1 50
(integer) 2
Redisのパブリケーションとサブスクリプション
メッセージのパブリケーションは、通常、同じサーバ上の複数のユーザに対して行われる.例えば、3人のユーザが同時にxshellを介して同じサーバをリモートで開くredisユーザは、他のユーザがこのチャネルでpublishをパブリッシュするメッセージを受信するためにsubscribeチャネル番号を購読する必要があり、購読側はリアルタイムでメッセージを受信する
# aaa
127.0.0.1:6379> subscribe aaa
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "aaa"
3) (integer) 1
#
127.0.0.1:6379> publish aaa hi
(integer) 1
#
127.0.0.1:6379> subscribe aaa
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "aaa"
3) (integer) 1
1) "message"
2) "aaa"
3) "hi"
# unsubscribe
python呼び出しredis
#
pyvip@vip:~$ sudo vim /etc/redis/redis.conf
[sudo] password for pyvip:
396 # requirepass foobared
397 requirepass allan
#
pyvip@vip:~$ sudo service redis-server restart
# redis key
127.0.0.1:6379> set nn b
(error) NOAUTH Authentication required.
#
127.0.0.1:6379> auth allan
OK
#
pyvip@vip:~$ sudo vim /etc/redis/redis.conf
69 # bind 127.0.0.1
70 bind 0.0.0.0
#
pyvip@vip:~$ sudo service redis-server restart
# redis, py3en
(py3env) pyvip@vip:~$ pip install redis
#python
#
import redis
# , localhost, 6379
r = redis.Redis(host='localhost',port=6379)
# key=aaaaa,value=hello world
r.set('aaaaa','hello world')
# key value
print(r.get('aaaaa'))
#python value
b'hello world'
# redis key
127.0.0.1:6379> get aaaaa
"hello world"
#python byte ,
r.set('hello',' ')
print(r.get('hello'))
# b'\xe4\xbd\xa0\xe5\xa5\xbd'
#
print(r.get('hello').decode('utf-8'))
#