NoSQLのredisを解説
記事目次
I. リレーショナルデータベースと非リレーショナルデータベースの比較
1. リレーショナルデータベース
SQL文(Standard Data Query Language)は、リレーショナルデータベースに基づいて、リレーショナルデータベース内のデータの検索や操作を行うための言語である。
主なリレーショナルデータベースには、Oracle、MySQL(mariadb)、SQL Server、Microsoft Access、DB2などがある。
2. 非リレーショナルデータベース
NoSQL(NoSQL=NotOnlySQL)、つまり
Not only SQL
は、非リレーショナルデータベースの総称である。主流のリレーショナル・データベース以外のデータベースを非リレーショナルと呼ぶ。
NoSQLデータベースとしては、Redis、MongoDB、Hbase、Memcached、Postgresqlなどが主流である。
3. リレーショナルデータベースとノンリレーショナルデータベースの違い
3.1 データの保存方法の違い
リレーショナルデータベースと非リレーショナルデータベースの主な違いは、データの保存方法です。リレーショナル・データは当然ながら表形式であり、したがってデータ・テーブルの行と列に格納される。データテーブルは互いに関連付けられ、共同して保存することができ、データの抽出も容易である。
これに対し、非リレーショナルデータは、データテーブルの行と列に収まらず、大きな塊としてまとめられる。非リレーショナルデータは通常、ドキュメント、キー・バリューペア、グラフ構造などのデータセットに格納される。データの保存と抽出の方法を選択する際には、データとその特性が主な影響因子となる。
- リレーショナル。関係モデルE-R図に基づき、2次元の表形式でデータを保存する。
- 非リレーショナル:表形式で保存されるだけでなく、通常、データは大きな塊でグループ化されて保存される。
3.2 さまざまな拡張機能
SQLデータベースとNoSQLデータベースの最大の違いは、おそらくスケールアップの方法にあります。当然ながら、需要の増大に対応するためにスケールアップしなければなりません。
より多くの同時処理量に対応するため、SQLデータベースは垂直方向に拡張します。つまり、同じデータセットをより速く処理できるように処理能力を高め、より高速なコンピュータを使用します。データはリレーショナルテーブルに格納されるため、操作のパフォーマンスボトルネックは多くのテーブルに及ぶ可能性があり、そのすべてをコンピューターの性能向上で克服する必要があります。SQLデータベースはまだまだ拡張の余地がありますが、いずれは垂直スケーリングの上限に達することは間違いないでしょう。
NoSQLデータベースは、水平方向に拡張可能なデータベースです。非リレーショナルデータストアは自然に分散されるので、NoSQLデータベースは、リソースプールに共通のデータベースサーバー(ノード)を追加して負荷を共有することで拡張できます。
- リレーションシップ 縦型(自然な表形式)
- 非リレーショナル:水平(自然分散型)
3.3 トランザクションの異なるサポート
データ操作に高度なトランザクションが必要な場合や、複雑なデータクエリの実行計画を制御する必要がある場合は、パフォーマンスと安定性の面から従来の SQL データベースが最適です。SQLデータベースは、トランザクションに対する原子レベルのきめ細かい制御(ACID)と、トランザクションの容易なロールバックをサポートしています。
NoSQLデータベースもトランザクションは使えますが、安定性という点ではリレーショナルデータベースに及ばないので、真に輝く価値は運用上のスケーラビリティや大容量データ処理にあると思います。
- リレーショナル。トランザクションの要件が高く、実行スケジュールを制御する必要があるタスクに特に適している。
- 非リレーショナル:こちらはやや弱く、その価値は高いスケーラビリティと大量のデータ処理という点にある
4. 非リレーショナルデータベース生成コンテキスト
Web2.0の純粋な動的サイトタイプの3つの高さに対応するため。
-
高いパフォーマンス
Highly concurrent read and write requirements for databases
-
HugeStorage
Efficient storage and access requirements for large amounts of data
-
高い拡張性 && 高い可用性
High Scalability and High Availability Requirements for Databases
リレーショナルデータベースとノンリレーショナルデータベースは、それぞれに特徴や適用シーンがあり、それらが密接に連携することで、Web2.0のためのデータベース開発に新しいアイデアをもたらすことができます。リレーショナル・データベースは関係性に、ノンリレーショナル・データベースはストレージに注目させる。例えば、読み書き分離型のMySQLデータベース環境では、頻繁にアクセスするデータを非リレーショナルデータベースに格納することで、アクセス速度を向上させることができる。
mysql high heat data -> redis
web -> redis -> mysql
cpu -> memory/cache -> disk
リレーショナルデータベースのストアドプロシージャ。
Instance -> database -> table -> record row, data field -> store data
非リレーショナルデータベース
Instances -> Databases -> Collections -> Key-value pairs (key-value)
PS.
非リレーショナルデータベースでは、ライブラリやテーブルを手動で作成する必要はありません。
II. redis の基本概念
1. redis入門
- redisはCで書かれたオープンソースのNoSQLデータベースです。
- redisはメモリ上で動作し、今日の分散アーキテクチャに不可欠なKey-Valueストレージの形で永続化(ディスクへの保存をサポート)をサポートします。
- redisサーバーアプリケーションはシングルプロセスモデルです。
redisサービスは、1台のサーバー上で複数のredisプロセスを同時に起動することができ、redisの実際の処理速度は、メインプロセスの実行効率に完全に依存します。サーバー上で1つのredisプロセスしか起動していない場合、複数のクライアントが同時にアクセスするとサーバーの処理能力はやや低下し、同じサーバー上で複数のredisプロセスを起動すると、redisはサーバーのCPUに大きな負担をかけながら同時処理能力を向上させることになります。つまり、本番環境では、実際のニーズに応じてRedisプロセスをいくつ有効にするかを決定する必要がある。
It is usually recommended to have 2 processes, for the following reasons.
- バックアップ
- CPUへの負担を抑えつつ、高い並列度に耐える。
より高い同時実行性の要求には、同じサーバーで複数のプロセスを開くことを検討するとよいでしょう。CPUリソースが逼迫している場合は、単一プロセスで十分です。
2.redisのメリット
- 非常に高速なデータの読み込みと書き込み:最大110,000データ読み込み/秒、最大81,000データ書き込み/秒
- 豊富なデータ型サポート:Key-Value、String、Lists、Hash、Sets、Ordered Setsのデータ型操作に対応
string string: can be shaped, floating point and character type, collectively referred to as elements
list: implements a queue, the elements are not unique, first-in-first-out principle
set set: elements that are different from each other
hash hash value: the key of the hash must be unique
set/ordered sets: sets/ordered sets
- データ永続化のサポート:メモリ内のデータをディスクに保存し、再起動時に再読み込みして使用することができます
- アトミック性:REDISのすべての操作はアトミックである
- データバックアップ対応:マスター・スレーブモードのデータバックアップが可能
- パブリッシュ/サブスクライブ、通知、キーエクスパイアの設定などに対応。
3. Redis の使用シナリオ
メモリベースのデータベースであるredisは、キャッシュが最も一般的な利用シーンの1つです。また、最新のNデータを取得する操作、リーダーボードアプリケーション、カウンターアプリケーション、ストアドリレーションシップ、リアルタイム分析システム、ロギングなどがredisの一般的な利用シーンとなります。
4. redisが高速である理由
- redisは純粋にインメモリ構造であるため、ディスクI/Oなどの時間のかかる操作を避けることができます。
- redisコマンド処理のコアモジュールはシングルスレッドで、ロック競合や頻繁なスレッド生成・破棄のコストを削減し、スレッドコンテキスト切り替えの消費を抑えることができます
- I/O多重化機構を採用し、並行処理効率を大幅に向上
I/Oマルチプレクサは複数のソケット接続を同時にリッスンしますが、リッスンしたソケットをすべてキューに入れ、各ソケットに対応する時刻をキューを通してファイルイベントディスパッチャに整然と同期して渡し、対応するイベントハンドラに処理を委ねるという仕組みになっています。あるソケットに対応するイベントが処理されたときだけ、I/Oマルチプレクサは次のソケットに対応するイベントをファイルイベントディスパッチャに送信し続ける。これは、クライアントのコマンド要求はシングルスレッドで処理されるが、イベントハンドラには1つだけのスレッドがあるという上記の結論を検証していることになる。
5. エポール機構のメリット
- epoll には同時接続の最大数の制限はありません。上限は開くことのできるファイルの最大数で、一般的には 2048 よりもずっと大きくなります。この数字は一般的にシステムメモリに大きく関係しており、 cat /proc/sys/fs/file-max で確認することができます。
-
epollの素晴らしいところは、あなたの
active
そのため、実際のネットワーク環境では、epoll は select や poll よりもはるかに効率的です。 - I/O多重化とは、複数のディスクリプタを監視し、ディスクリプタの準備ができた時点でプログラムに通知する仕組みのことです。
The I/O multiplexing implemented by the epoll model can be defined as follows.
socket 1 ->
socket 2 -> I/O multiplexer -> File event dispatcher (fetches from queue and distributes to corresponding processor) -> Processors for command processing, requests, connection answers, etc.
socket 3 ->
<イグ
-
複数のソケットをfdファイルディスクリプタとして定義し(カーネルはnew, open, modifyなどの"イベント"ごとにfdを返す(当然インデックス付き))、各fdが起動したときにカーネル内のコールバック関数が実行されるようにします。
-
I/Oマルチプレクサは、ソケットがアクティブになっているリンクをリッスンし、そのソケットを呼び出します(このソケットのファイルハンドルは、主にネットワーク上に実装されています)。
process on the network identified by ip+port+protocol
)は、簡単に言うと仮想インターフェース(抽象化層)として理解することができます。本質的には、複数のソケット(I/Oストリーム)の状態を追跡するために、1つのスレッドを使用して、複数のI/Oを管理しているのです。 -
I/O多重化:1つのスレッドが複数の接続を同時に追跡・管理する(本来はデフォルトで1つの接続に1つのスレッド)。
-
コールバック:特定の実行手順をあらかじめ定義しておき(メソッドを定義しておき)、呼ばれるのを待つ。スレッドの実行が与えられると、そのスレッドに基づく
処理性能の向上とリソースの節約を目的とした「Completionコールバック」。triggers hooks
III. Redis のインストール手順
1. ファイアウォールとSelinuxをオフにする
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
wget http://101.34.22.188/redis/redis-5.0.7.tar.gz -P /opt
yum -y install gcc gcc-c++ make
yum repolist && yum -y install gcc*
cd /opt
tar zxvf /opt/redis-5.0.7.tar.gz -C /opt
cd /opt/redis-5.0.7/
# The Makefile file is provided directly in the redis source package, so after unpacking the package, you don't have to run . /configure, you can run make and make install directly to install
make && make PREFIX=/usr/local/redis install
cd /opt/redis-5.0.7/utils
# Execute the install_server.sh script file provided with the package to set up the relevant configuration files for the redis service
. /install_server.sh
....... # Keep entering
Please select the redis executable path [] /usr/local/redis/bin/redis-server
#You need to type /usr/local/redis/bin/redis-server manually #Be careful to type it correctly all at once
Port : 6379 #The default listening port is 6379
Config file : /etc/redis/6379.conf #path to config file
Log file : /var/log/redis_6379.log #path to log file
Data dir : /var/lib/redis/6379 #path to data file
Executable : /usr/local/redis/bin/redis-server #Executable file path
Cli Executable : /usr/local/redis/bin/redis-cli #Client command tool
#Place the redis executable in the path environment variable for system recognition
ln -s /usr/local/redis/bin/* /usr/local/bin/
#When the install_server.sh script is finished, the redis service will have started and will be listening on port 6379 by default
netstat -natp | grep redis
/etc/init.d/redis_6379 stop #stop
/etc/init.d/redis_6379 start # start
/etc/init.d/redis_6379 restart #restart
/etc/init.d/redis_6379 status # status
vim /etc/redis/6379.conf
+bind
bind 127.0.0.1 192.168.10.20 #70 line, add the listening host address
port 6379 #93, the default redis listening port
daemonize yes #137, enable the daemon
pidfile /var/run/redis_6379.pid #159, specifies the PID file
loglevel notice #167, the log level
logfile /var/log/redis_6379.log #172 lines, specifying the log file
----------------------------------------------------------
/etc/init.d/redis_6379 restart
cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl restart redis && systemctl enable redis
systemctl status redis
#! /bin/bash
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
yum -y install gcc gcc-c++ make net-tools tcl expect
sleep 5 - 10
cd /opt
if [ ! -f " redis-5.0.7.tar.gz" ]; then
wget http://101.34.22.188/redis/redis-5.0.7.tar.gz
#wget http://download.redis.io/releases/redis-5.0.7.tar.gz
fi
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd redis-5.0.7/
make
make PREFIX=/usr/local/redis install
cd /opt/redis-5.0.7/utils/
/usr/bin/expect <<EOF
spawn . /install_server.sh
expect "instance" {send "\r"}
expect "config" {send "\r"}
expect "log" {send "\r"}
expect "data" {send "\r"}
expect "executable" {send "/usr/local/redis/bin/redis-server\r"}
expect "abort" {send "\r"}
expect eof
EOF
ln -s /usr/local/redis/bin/* /usr/local/bin/
sed -i '/bind 127.0.0.1/c bind 0.0.0.0' /etc/redis/6379.conf
sed -i 's/appendonly no/appendonly yes/' /etc/redis/6379.conf
cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl restart redis && systemctl enable redis
netstat -natp | grep "redis"
pgrep "redis" &> /dev/null
if [ $? -eq 0 ];then
echo -e "\033[46;37m Redis service is running fine \033[0m"
else
echo -e "\033[46;37m Redis service is running abnormally, please check \033[0m"
fi
sleep 2
echo ' '
echo -e "\033[46;37m Redis did not set password, execute redis-cli command to login \033[0m"
redis-server: A tool for starting redis
redis-benchmark: A tool to check the efficiency of redis on the local machine
redis-check-aof: fixes AOF persistence files
redis-check-rdb: fixes RDB persistence files
redis-cli: redis command-line tool, often used to log into a redis database
2. ソースコードのコンパイルとインストール
redis-cli -h host -p port -a password
-h Specifies the remote host
-p specifies the port number of the redis service
-a specifies the password, the -a option can be omitted if the database password is not set
# If no options are added, the redis database on the local machine is connected using 127.0.0.1:6379
<イグ
コンフィギュレーションの説明です。
[root@c7-1 ~]#redis-cli -h 192.168.10.20 -p 6379
192.168.10.20:6379> quit
[root@c7-1 ~]#redis-cli
127.0.0.1:6379> quit
redis-benchmark is the official redis performance testing tool that tests the performance of redis services.
Basic test syntax: redis-benchmark [option] [option value]
-h Specifies the server host name
-p specifies the server port
-s specifies the server socket (sockets)
-c specifies the number of concurrent connections
-n specifies the number of requests
-d Specify the data size of SET/GET values in bytes
-k 1=keep alive 0=reconnect
-r SET/GET/INCR with random key, SADD with random value
-P Transfer via pipe <numreq> request
-q force exit from redis, show only query/sec values
-l Generate loops to execute tests permanently
-t Run only comma-separated list of test commands
-I Idle mode, open only N idle connections and wait
--csv output in CSV format
3. パスの最適化
#Send 100 concurrent connections with 100000 requests to the redis server with IP address 192.168.10.20 and port 6379 to test performance
redis-benchmark -h 192.168.10.20 -p 6379 -c 100 -n 100000
#Test the performance of accessing packets of 100 bytes in size
redis-benchmark -h 192.168.10.20 -p 6379 -q -d 100
#Test the performance of the redis service on the local machine when performing set and lpush operations
redis-benchmark -t set,lpush -n 100000 -q
4. redis サービスコントロール
[root@c7-1 ~]#redis-cli
127.0.0.1:6379> set name zc
ok
127.0.0.1:6379> get name
"zc"
The keys command takes a list of keys that match a rule, usually in combination with the * ? options such as
[root@c7-1 ~]#redis-cli
127.0.0.1:6379> keys *
1) "name"
2) "myset:__rand_int__"
3) "key:__rand_int__"
4) "counter:__rand_int__"
5) "mylist"
Match after creating key
[root@c7-1 ~]#redis-cli
127.0.0.1:6379> keys * # View all keys in the current database
1) "name"
2) "myset:__rand_int__"
3) "key:__rand_int__"
4) "counter:__rand_int__"
5) "mylist"
127.0.0.1:6379> keys v?
(empty list or set)
127.0.0.1:6379> set k1 1
k1 1
127.0.0.1:6379> set k1 2
OK
127.0.0.1:6379> set k1 3
OK
127.0.0.1:6379> keys *
1) "name"
2) "myset:__rand_int__"
3) "key:__rand_int__"
4) "counter:__rand_int__"
5) "mylist"
6) "k1"
127.0.0.1:6379> set v1 1
OK
127.0.0.1:6379> set v1 2
OK
127.0.0.1:6379> set v2 1
OK
127.0.0.1:6379> set v2 2
OK
127.0.0.1:6379> keys *
1) "name"
2) "myset:__rand_int__"
3) "key:__rand_int__"
4) "counter:__rand_int__"
5) "mylist"
6) "v2"
7) "v1"
8) "k1"
127.0.0.1:6379> keys v* #View the data in the current database starting with v
1) "v2"
2) "v1"
127.0.0.1:6379> keys k* #View the data in the current database that starts with k
1) "key:__rand_int__"
2) "k1"
127.0.0.1:6379> keys *1 #View data ending in 1 in the current database
1) "v1"
2) "k1"
127.0.0.1:6379> keys ?1 #View data in the current database that ends in 1 and contains any digit before 1
1) "v1"
2) "k1"
127.0.0.1:6379> keys ? 1 #View the data in the current database that ends with 1 and contains any two digits before 1
(empty list or set)
The exists command determines whether a key exists
127.0.0.1:6379> EXISTS name
(integer) 1 # indicates that the name key is present
127.0.0.1:6379> EXISTS na
(integer) 0 # means that the na key does not exist
The del command deletes the specified key from the current database
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> EXISTS name
(integer) 0
127.0.0.1:6379> KEYS name
(empty list or set)
The type command gets the type of value corresponding to the key
127.0.0.1:6379> type k1
string
127.0.0.1:6379> type v1
string
5. 設定 /etc/redis/6379.conf のパラメータを変更する。
rename [source key] [target key]
6. システムサービスの登録
Rename
127.0.0.1:6379> keys v*
1) "v2"
2) "v1"
127.0.0.1:6379> rename v1 v5
OK
127.0.0.1:6379> keys v*
1) "v5"
2) "v2"
Override
127.0.0.1:6379> get v2
"2"
127.0.0.1:6379> get v5
"2"
127.0.0.1:6379> rename v2 v4
ok
127.0.0.1:6379> keys v*
1) "v4"
2) "v5"
127.0.0.1:6379> get v4
"2"
127.0.0.1:6379> get v2
(nil)
renamenx [source key] [target key]
127.0.0.1:6379> keys v*
1) "v4"
2) "v5"
127.0.0.1:6379> renamenx v4 v1
(integer) 1
127.0.0.1:6379> keys v*
1) "v5"
2) "v1"
127.0.0.1:6379> renamenx v5 v1
(integer) 0
127.0.0.1:6379> keys v*
1) "v5"
2) "v1"
7. ワンクリックでインストールできるredisスクリプト
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
127.0.0.1:6379> dbsize
(integer) 7
IV. redis の管理制御
1. redisコマンドツール
config set requirepass password
RDBとAOFは、redisサービスにおける永続化機能の2つの形態である。
- RDB: 指定された時間だけディスクにデータを書き込むサブプロセスをフォークし、書き込みごとに前のファイルを上書きします。
- AOF:すべての書き込みコマンドをログに記録し、ログファイル名を指定する
2. redis-cli コマンドラインツール
シンタックス
127.0.0.1:6379> config set requirepass 123456
OK
例
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
You can also use the -a option when logging in and enter your password
[root@c7-1 ~]#redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
# Use with caution as the password will be directly exposed and there is a risk of history theft
3. redis-benchmarkテストツール
config get requirepass
テスト例です。
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
V. redisデータベースの共通コマンド
1. 設定/取得
- set: データを保存し、コマンドのフォーマットは set key value です。
- get: データを取得する、コマンドフォーマットは get key
config set requirepass ''
2. キー
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> config set requirepass ''
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> quit
[root@c7-1 ~]#redis-cli
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
3.存在する
select
127.0.0.1:6379[1]> select 0
ok
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
4.
move key value sequence number
127.0.0.1:6379[1]> select 0 # switch 0 library
ok
127.0.0.1:6379> set name zhangsan #create name key, assign zhangsan
ok
127.0.0.1:6379> get name #View name key content
"zhangsan"
127.0.0.1:6379> select 1 # switch 1 library
ok
127.0.0.1:6379[1]> get name #see if there is a name key
(nil)
127.0.0.1:6379[1]> select 0 # switch library 0
OK
127.0.0.1:6379> move name 1 #Move name key to library 1
(integer) 1
127.0.0.1:6379> get name # 0 library no longer has name key
(nil)
127.0.0.1:6379> select 1 # switch library 1
ok
127.0.0.1:6379[1]> get name # check name key
"zhangsan"
5. タイプ
127.0.0.1:6379> select 1
ok
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> flushall
flushall
127.0.0.1:6379[1]> select 0
ok
127.0.0.1:6379> keys *
(empty list or set)
6. 名前の変更
rename コマンドは、既存のキーの名前を変更(上書き)します。
コマンドの形式です。
rename [source key] [target key]
renameコマンドで名前を変更する場合、対象のキーが存在するかどうかに関係なく名前が変更され、元のキーの値が対象のキーの値を上書きします。実際には、重要なデータの上書きを避けるため、exists コマンドを使用してターゲット キーが存在するかどうかを確認してから、両方に対して rename を実行するかどうかを決定することをお勧めします。
Rename
127.0.0.1:6379> keys v*
1) "v2"
2) "v1"
127.0.0.1:6379> rename v1 v5
OK
127.0.0.1:6379> keys v*
1) "v5"
2) "v2"
Override
127.0.0.1:6379> get v2
"2"
127.0.0.1:6379> get v5
"2"
127.0.0.1:6379> rename v2 v4
ok
127.0.0.1:6379> keys v*
1) "v4"
2) "v5"
127.0.0.1:6379> get v4
"2"
127.0.0.1:6379> get v2
(nil)
7.レナメンクス
renamenxコマンドは、既存のキーの名前を変更し、新しい名前が存在するかどうかを確認しますが、ターゲットキーが存在する場合は名前を変更しない(上書きしない)。
コマンドの形式です。
renamenx [source key] [target key]
127.0.0.1:6379> keys v*
1) "v4"
2) "v5"
127.0.0.1:6379> renamenx v4 v1
(integer) 1
127.0.0.1:6379> keys v*
1) "v5"
2) "v1"
127.0.0.1:6379> renamenx v5 v1
(integer) 0
127.0.0.1:6379> keys v*
1) "v5"
2) "v1"
8. dbsize
dbsize コマンドは、現在のデータベースのキー数を表示するために使用されます
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
127.0.0.1:6379> dbsize
(integer) 7
9. パスワード設定
使用方法
config set requirepass password
コマンドでパスワードを設定します。
127.0.0.1:6379> config set requirepass 123456
OK
10. パスワードの確認
パスワードの確認には、authコマンドを使用します。パスワードが設定されると、すべてのログインはまずパスワードで検証されなければならず、そうでなければすべての操作は機能しません
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
You can also use the -a option when logging in and enter your password
[root@c7-1 ~]#redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
# Use with caution as the password will be directly exposed and there is a risk of history theft
11. パスワードの表示
を使用します。
config get requirepass
コマンドを実行すると、パスワードを確認できます。
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
12. パスワードの解除
を使用します。
config set requirepass ''
コマンドでパスワードをクリアし、空のパスワードを再定義してパスワード認証を解除します。
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> config set requirepass ''
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> quit
[root@c7-1 ~]#redis-cli
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
VI. redisマルチデータベース共通コマンド
redisは複数のデータベースをサポートしています。redisはデフォルトで16個のデータベースを持ち、データベース名は0-15の数字を使って連続的に命名されます。複数のデータベースは互いに独立しており、干渉することはありません。
1. 複数データベースの切替
redis-cliでredisデータベースに接続すると、デフォルトでシリアル番号0のデータベースが使用されます。
コマンドの形式です。
select
127.0.0.1:6379[1]> select 0
ok
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
2. 複数のデータベース間でデータを移動する
フォーマット
move key value sequence number
127.0.0.1:6379[1]> select 0 # switch 0 library
ok
127.0.0.1:6379> set name zhangsan #create name key, assign zhangsan
ok
127.0.0.1:6379> get name #View name key content
"zhangsan"
127.0.0.1:6379> select 1 # switch 1 library
ok
127.0.0.1:6379[1]> get name #see if there is a name key
(nil)
127.0.0.1:6379[1]> select 0 # switch library 0
OK
127.0.0.1:6379> move name 1 #Move name key to library 1
(integer) 1
127.0.0.1:6379> get name # 0 library no longer has name key
(nil)
127.0.0.1:6379> select 1 # switch library 1
ok
127.0.0.1:6379[1]> get name # check name key
"zhangsan"
3. データベースデータのクリア
- flushdb: 現在のデータベースデータをフラッシュします。
- flushall: すべてのデータベースデータをフラッシュします(使用には注意が必要です)
127.0.0.1:6379> select 1
ok
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "mylist"
5) "v5"
6) "v1"
7) "k1"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> flushall
flushall
127.0.0.1:6379[1]> select 0
ok
127.0.0.1:6379> keys *
(empty list or set)
関連
-
ImportError: libSM.so.6: cannot open shared object file: そのようなファイルやディレクトリはありません 解決方法
-
SocketExceptionです。ブロークン・パイプ・エラーの可能性
-
kill はプロセスを終了させることができません
-
Haproxy の「502 Bad Gateway サーバーが無効または不完全な応答を返しました」を解決する。
-
413 リクエストエンティティが大きすぎる問題の解決策
-
CentOS 7のインストールとDockerの展開
-
scpコマンドが通常のファイルでないことを報告する問題の解決法
-
socket.errorを解決する。[Errno 98] アドレスが既に使用されている問題
-
c/c++][gcc] 'std::basic_string ...' への未定義の参照。
-
arpa/inet.h
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ssh@host:""ssh スイッチで他のマシンで複数のコマンドを実行する。stdin はターミナルではないので、擬似ターミナルは割り当てられない。
-
mac os python3 エラー dyld: ライブラリがロードされない
-
ERR_CONTENT_LENGTH_MISMATCH 問題解決のためのハンドブック
-
find:表現上の問題と解決策の前に、道筋がなければならない
-
gcc コンパイル時にオペランドがバイナリに変換されない -解決方法
-
metasploitに関するいくつかのアーキテクチャカタログ
-
nginx の Linux インストール 'struct crypt_data' には 'current_salt' という名前のメンバがない 解決方法
-
mfsmount トランスポートエンドポイントが接続されていない
-
コンパイル時の警告をなくす(Warning)
-
ansibleのitemsとwith_itemsを理解する