使用Redis操作多个键

关于Redis数据库

为了给那些不了解Redis数据库的人简短介绍一下。Redis是一种内存数据库,简单来说就是在机器的内存中构建数据库,以实现快速读写操作的数据库。

在磁盘上执行文件的读写操作比较之下可以更快速地完成。

由于在内存上构建数据库,因此在机器宕机时无法使用,但是Redis可以选择将数据同时写入内存和文件中。

Redis是一种键值存储型数据库。也就是说,它会将一个键对应保存为一个值。类似于JavaScript中的一个大JsonObect,Java中的HashMap,Objective-C中的NSMutableDictionary。

如果你对此感兴趣,我推荐阅读这篇介绍文章。- Redis学习会的资料

不是的!Redis并不是最高的!

Redis虽然是内存数据库,所以速度很快!但也不是最好的!

在内存上构建数据库有其限制。
由于是键值存储型,所以不适用于像MySQL这样需要进行条件搜索的情况。
相反,适用于保存每个用户数据的情况。
因此,在需要像缓存数据库一样使用时,非常方便易用。

因为是KVS…

由于是键值存储型数据库,所以对于一个键而言很自然地只有一个值是基本的。
在Redis中,可以保存哈希类型的值,因此可以为一个键分配一个哈希,并在哈希中创建多个字段,从而可以保存多个值。

这虽然方便,但当需要操作多个键时会很麻烦。
Redis提供了用于操作数据库的标准命令。
但它是一种键值存储型数据库,所以只能通过一个命令操作一个键。

如果想要一次性删除多个键的话,可以选择通过多次执行DEL命令,或者使用通配符(*)来一次性删除多个键。

举个例子,假设有这样的数据。

$ redis-cli
keys key:*
1) "key:01"
2) "key:02"
3) "key:03"
4) "key:04"
5) "key:05"

在巷子里似乎正在使用xargs。

$ redis-cli --raw -n 0 KEYS "key:*" | xargs redis-cli -n 0 DEL
(integer) 5

这个是否不太好用呢?
如果是这样简单的数据,用xargs也可以,但如果是更复杂的键组合,则需要自己编写程序,提取并删除相应的键值对,类似这样的事情。

实际上,我也做了很多次。

使用redis-ex-cli可以同时操作多个键!

何度も何度も似たようなコードを書いている内に、「これ、コマンドでできたらいいのに・・・」と思って作ったオレオレコマンドが、redis-ex-cliです。

使い方はこんな感じ。

// redis-ex-cliコマンドに入る
$> redis-ex-cli

// サーバーに接続
(disconnect) >> server localhost

// データベースのインデックスを選択(デフォルト:0)
localhost >> select 1

// キーの一覧を確認する
localhost >> keys logs:2014:11*
logs:2014:1120:12-40-00
logs:2014:1120:23-04-38
logs:2014:1121:10-42-31
logs:2014:1121:10-42-34
logs:2014:1121:10-42-35

// 11/21のデータだけまとめて削除
localhost >> keys del logs:2014:1121:*
[del]logs:2014:1121:10-42-31
[del]logs:2014:1121:10-42-34
[del]logs:2014:1121:10-42-35

Do you want to delete [N]/Y Y  <!-- いきなり削除しない! ちゃんと確認できる

使用正規表達式來篩選鍵值!

このredis-ex-cliのいいところは、キーの検索を正規表現を使ってできる、ということ。
仕組みは単純で、ワイルドカードを使って複数キーを抽出して、そこから正規表現を使って該当するキーを抽出して処理する、ってわけです。

例えば「17時と18時のログデータだけ抽出したい」という場合、正規表現で /1[7-8]/でいいので、下のような感じでできます。

localhost >> keys logs:2015:0404:1[7-8].*
logs:2015:0404:17-40-42
logs:2015:0404:17-41-55
logs:2015:0404:17-56-05
logs:2015:0404:18-01-36
logs:2015:0404:18-06-26
logs:2015:0404:18-11-17

Redis標準のコマンドだと、2回実行しないと出来ません。

redis 127.0.0.1:6379 > keys logs:2015:0404:17*
logs:2015:0404:17-40-42
logs:2015:0404:17-41-55
logs:2015:0404:17-56-05

redis 127.0.0.1:6379 > keys logs:2015:0404:18*
logs:2015:0404:18-01-36
logs:2015:0404:18-06-26
logs:2015:0404:18-11-17

複数キーをまとめてコピー

Redisは高速なので、ちょっとした処理をするときに作業用DBみたいな扱いで使うことがあります。
その場合、元データをいきなり操作しないですよね(普通は)。
だから複数キーのコピーを作りたいことが頻繁にあります。

如果使用redis-ex-cli,就很简单。只需使用keys copy命令,它会轻松地帮你复制。

localhost >> keys copy logs:2015:04* logs:test:

[copy]logs:2015:0401:06-59-46 --> logs:test:01:06-59-46
[copy]logs:2015:0406:07-09-22 --> logs:test:06:07-09-22
[copy]logs:2015:0401:07-11-43 --> logs:test:01:07-11-43
[copy]logs:2015:0401:07-12-36 --> logs:test:01:07-12-36

Do you want to copy [N]/Y Y

可以同时更改多个键吗?完全没问题。

可以使用正则表达式的分组进行替换。

localhost >> keys rename logs:2014:04(.*) logs:2015:05$1:test

[rename]logs:2014:0401:06-59-46 --> logs:2015:0501:06-59-46:test
[rename]logs:2014:0401:07-11-43 --> logs:2015:0501:07-11-43:test
[rename]logs:2014:0401:07-12-36 --> logs:2015:0501:07-12-36:test

Do you want to rename [N]/Y 

我想要将Hash类型的一个字段进行批量更改。

有没有时候想要设置测试标志之类的?
如果使用redis-ex-cli,可以一起执行hset命令。

localhost >>keys hset logs:2015:04* isTest true

[hset]logs:2015:0401:06-59-46
[hset]logs:2015:0401:07-01-02
[hset]logs:2015:0401:07-11-43
[hset]logs:2015:0401:07-12-36

Do you want to set values [N]/Y 

我想要删除Hash类型中的一个字段

你只想删除一个字段吗?请使用hdel。

localhost >>keys hdel logs:* isTest

[hdel]logs:2015:0401:06-59-46
[hdel]logs:2015:0401:07-01-02
[hdel]logs:2015:0401:07-11-43
[hdel]logs:2015:0401:07-12-36

Do you want to delete [N]/Y 

あるフィールドで特定の値を持つキーだけを抽出したい

你很贪心呢,但是可以实现。目前只能进行搜索。

localhost >>keys hsearch logs:2015:04* sendto ^310\-.*

logs:2015:0401:13-45-17
logs:2015:0401:15-02-59
logs:2015:0402:14-09-03
logs:2015:0404:15-20-56
logs:2015:0404:17-41-55
logs:2015:0404:17-56-05
logs:2015:0405:11-32-43
logs:2015:0405:14-50-55
logs:2015:0405:14-54-07

バックアップを取りたい

在进行操作之前,请先备份数据。是的,您希望这样做,对吗?
将数据以Redis命令格式保存到文件中,以便恢复数据。

localhost >> keys export logs:2015:0404:1[7-8].* 20150404-from17to18.log

从备份中恢复

如果你想从Key Export创建的备份中恢复数据,只需要使用Key Import :filename来指定即可。

localhost >> keys import 20150404-from17to18.log

你开始想用它了吗?

请在您的个人电脑上安装Node.js才能使用。
然后只需执行以下命令即可。

$> (sudo) npm -g install redis-ex-cli

请阅读https://github.com/wf9a5m75/redis-ex-cli。

广告
将在 10 秒后关闭
bannerAds