如果我,我就能理解Redis

首先

这只是我勉强整理出来的东西。

※我会明白

Redis的概述

    • インメモリデータベース

ディスクではなく高速なメインメモリにデータを格納
高速かつ安定したパフォーマンスを提供

大容量のデータに不向き
部分的なデータ保存に向いている
定期的にディスクに書き込みデータを永続化する
別名データ構造サーバ

キーに紐づく値の一般的な関係はもちろん複雑なデータ構造も扱える

专业术语

    • KVS

Key, Value Storeの頭文字
キーに紐づく値のこと
例)Name(key): “Taro”(value)
長いキーは推奨されていない

データ・タイプ

String:シンプルなデータ

例)Name: “Taro”

List:順番に並べた複数の要素

例)時系列的なデータ

Set:順不同の複数の要素(重複を許さない)

例)タグ,ソーシャルグラフ

Sorted Set:Setの特徴を持ちつつも個々の要素にスコアが付く

例)ランキング

Hashe:連想配列

例)わかりやすいラベルと値のセット

環境配置

本地使用

苹果电脑

# Mac
$ brew install redis

Ubuntu

# Ubuntu
$ sudo apt install redis

启动

# サーバーのスタート
$ redis-server

# 別ウインドウで下記コマンド入力によってサーバに入れる
$ redis-cli

停下来

# cliから抜ける
127.0.0.1:6379> exit

# サーバの停止
redis-serverは
Ctrl+Cで停止することができる

建议使用Docker。

version: '3'
services:
  redis:
    image: "redis:latest"
    ports:
      - "6379:6379"
    volumes:
      - "./data/redis:/data"

启动

# コンテナの立ち上げ
$ docker-compose up -d

# 立ち上上げたredisコンテナに入ってcliを叩く
$ docker-compose exec redis redis-cli

停下来

# cliから抜ける
127.0.0.1:6379> exit

# コンテナの停止
$ docker-compose down

操作数据库

选择数据库

默认情况下,已选中编号为0的数据库。

127.0.0.1:6379> select 数字

可以选择从0到15

数据存储

127.0.0.1:6379> bgsave

在执行命令后,将在本地生成一个dump.rdb文件,先前保存的数据将被写入该文件中。

String的操作

插入数据

    • 形式

 

    • set key value

 

127.0.0.1:6379> set name taro
OK
127.0.0.1:6379> set email taro@gmail.com
OK
127.0.0.1:6379> set age 20
OK

显示与键相关联的值

    • 形式

 

    • 単数:get キー名

 

    • 複数:mget キー名1 キー名2

 

# 1つのみ表示
127.0.0.1:6379> get name
"taro"

# 複数の値を表示する場合はmgetを使ってkeyを羅列する
127.0.0.1:6379> mget name email age
1) "taro"
2) "taro@gmail.com"
3) "20"

整数值的减少和增加操作

如果值是整数,可以进行增加或减少操作。

    • 形式

 

    • 増加:incr キー名

 

    • 減少:decr キー名

 

# 値の表示
127.0.0.1:6379> get age
"20"

# インクリメント
127.0.0.1:6379> incr age
(integer) 21

# デクリメント
127.0.0.1:6379> decr age
(integer) 20

您也可以将变化设置为大于等于1。

    • 形式

 

    • 増加数の指定:incrby 数字

 

    • 減少数の指定:decrby 数字

 

# 値の表示
127.0.0.1:6379> get age
"20"

# 増加数の指定
127.0.0.1:6379> incrby age 10
(integer) 30

# 減少数の指定
127.0.0.1:6379> decrby age 10
(integer) 20

操作KEY

關鍵的顯示

    • 形式

 

    • すべてのkeyの取得:keys *

 

    • 条件指定:keys 正規表現

 

    • 使える正規表現

 

    • ? ・・・任意の1文字

 

    • * ・・・ 任意の文字列

 

    • [ ] ・・・ 角カッコ内の文字のどれか1文字

 

# すべてのキーを取得
127.0.0.1:6379> keys *
1) "age"
2) "email"
3) "name"

# 条件指定,先頭がaまたはnのキーすべて
127.0.0.1:6379> keys [an]*
1) "age"
2) "name"

确认key的存在

    • 形式

 

    • exists キー

 

# キーnameは存在するため1が返ってくる
127.0.0.1:6379> exists name
(integer) 1
# キーimageは存在しないため0が返ってくる
127.0.0.1:6379> exists image
(integer) 0

修改 key 的名称

    • 形式

 

    • rename 元のキー名 新しいキー名

 

# ageからnenraiにキー名を変更
127.0.0.1:6379> rename age nenrai
OK
# 変更されたので元の名前では検索がマッチしません
127.0.0.1:6379> keys age
(empty array)
# 新しいキー名に変わっていることがわかります
127.0.0.1:6379> keys nenrai
1) "nenrai"

删除密钥

    • 形式

 

    • del キー名

 

127.0.0.1:6379> del nenrai
(integer) 1
127.0.0.1:6379> keys nenrai
(empty array)

暫時創建密鑰

    • 形式

 

    • expire キー名 秒数

 

# ageに20をセット
127.0.0.1:6379> set age 20
OK
# セットされていることの確認
127.0.0.1:6379> get age
"20"
# 有効期限を10秒にセット
127.0.0.1:6379> expire age 10
(integer) 1
# 5秒後,まだ値はある
127.0.0.1:6379> get age
"20"
# 10秒後値がキーが消えていることがわかる
127.0.0.1:6379> get age
(nil)

排序

    形式

数字排序:sort by 数字的键名 [倒序 升序]
字符串排序:sort by 字符串的键名 按字母顺序 [倒序 升序]

也能适用于下文提到的Set和List。

127.0.0.1:6379> sort students alpha asc
1) "jiro"
2) "saburo"
3) "shiro"
4) "taro"

操作List

在列表中添加数据

    • 形式

 

    • 先頭に要素を追加:lpush キー名 値1 値2 値3...

 

    • 末尾に要素を追加:rpush キー名 値1 値2 値3...

 

127.0.0.1:6379> rpush students taro
(integer) 1
# 複数同時に追加することも可能
127.0.0.1:6379> rpush students jiro saburolpop
(integer) 3

显示列表

    • 形式

 

    • 指定した要素の表示:lindex キー名 要素番号

 

    • 指定した範囲の要素を表示lrange キー名 start stop

 

# 指定した要素の表示
127.0.0.1:6379> lindex students 1
"jiro"

# 先頭の0から2までの格納された値を表示
127.0.0.1:6379> lrange students 0 2
1) "taro"
2) "jiro"
3) "saburo"

# -1は末尾を表している
127.0.0.1:6379> lrange students 0 -1
1) "taro"
2) "jiro"
3) "saburo"

显示要素数量

    形式

llen 键名的含义是什么?

127.0.0.1:6379> llen students
(integer) 4

删除列表中的数据

    • 形式

 

    • 先頭の要素削除:lpop キー名

 

    • 末尾の要素削除:rpop キー名

 

    • 指定した範囲以外削除:ltrim キー名 start stop

127.0.0.1:6379> lrange students 0 -1
1) "taro"
2) "jiro"
3) "saburo"

# 先頭の要素を削除
127.0.0.1:6379> lpop students
"taro"
127.0.0.1:6379> lrange students 0 -1
1) "jiro"
2) "saburo"

# 末尾の要素を削除
127.0.0.1:6379> rpop students
"saburo"
127.0.0.1:6379> lrange students 0 -1
1) "jiro"

# 指定した範囲以外を削除
127.0.0.1:6379> ltrim students 0 2
OK
127.0.0.1:6379> lrange students 0 -1
1) "taro"
2) "jiro"
3) "saburo"

操作Set

新加数据

    形式

给定 sadd 命令的参数,其中包括一个键名和一个或多个值,我们需要将其用中文重新表达。

# 値の追加
127.0.0.1:6379> sadd classroom taro
(integer) 1

# 複数の値をセットすることができる
127.0.0.1:6379> sadd classroom jiro saburo
(integer) 2

显示数据列表

    形式

获取集合的所有成员。

# Listと違い順不同で追加されていることがわかる
127.0.0.1:6379> smembers classroom
1) "jiro"
2) "saburo"
3) "taro"

删除数据

    • 形式

 

    • srem キー名 値

 

# jiroを削除
127.0.0.1:6379> srem classroom jiro
(integer) 1

# 消えていることがわかる
127.0.0.1:6379> smembers classroom
1) "saburo"
2) "taro"

聚集在一起

    • 形式

 

    • 和集合:sunion キー名1 キー名2

 

    • 差集合:sdiff キー名1 キー名2

 

    • 積集合:sinter キー名1 キー名2

 

    • 和集合のSetを作成:sunionstore キー名 比較する集合1 比較する集合2

 

    • 差集合のSetを作成:sdiffstore キー名 比較する集合1 比較する集合2

 

    • 積集合のSetを作成:sinterstore キー名 比較する集合1 比較する集合2

 

# 2つのSetを作成
127.0.0.1:6379> smembers classroom
1) "saburo"
2) "taro"
127.0.0.1:6379> sadd classroom2 taro jiro shiro
(integer) 3
127.0.0.1:6379> smembers classroom2
1) "jiro"
2) "taro"
3) "shiro"

# 和集合
127.0.0.1:6379> sunion classroom classroom2
1) "jiro"
2) "taro"
3) "saburo"
4) "shiro"

# 差集合
127.0.0.1:6379> sdiff classroom classroom2
1) "saburo"

# 積集合
127.0.0.1:6379> sinter classroom classroom2
1) "taro"

# 和集合のSetを作成
127.0.0.1:6379> sunionstore unionclassroom classroom classroom2
(integer) 4
127.0.0.1:6379> smembers unionclassroom
1) "jiro"
2) "taro"
3) "saburo"
4) "shiro"

操作Sorted Set的方法

在排名数据中经常被使用的

新增数据

    • 形式

 

    • zadd キー名 ランク 値

 

    • ソート時ランクが比較される

 

# 年齢をランクとしてセットしている
127.0.0.1:6379> zadd age 80 taro
(integer) 1
127.0.0.1:6379> zadd age 63 jiro
(integer) 1
127.0.0.1:6379> zadd age 49 saburo
(integer) 1
127.0.0.1:6379> zadd age 23 shiro
(integer) 1

显示数据

    形式

按升序显示:用 zrange 命令查看键名从开始到结束的范围内的值。
按降序显示:用 zrevrange 命令查看键名从开始到结束的范围内的值。

# 先頭から末尾まで昇順に表示
127.0.0.1:6379> zrange age 0 -1
1) "shiro"
2) "saburo"
3) "jiro"
4) "taro"

# 範囲は自由に指定できる
127.0.0.1:6379> zrange age 1 2
1) "saburo"
2) "jiro"

# 先頭から末尾まで降順に表示
127.0.0.1:6379> zrevrange age 0 -1
1) "taro"
2) "jiro"
3) "saburo"
4) "shiro"

排名显示

    形式

根据升序排名:zrank 键名 值
根据降序排名:zrevrank 键名 值

# 昇順時のランク
127.0.0.1:6379> zrank age taro
(integer) 3

# 降順時のランク
127.0.0.1:6379> zrevrank age taro
(integer) 0

刪除

    形式

删除键名中的值。

# shiroを削除
127.0.0.1:6379> zrem age shiro
(integer) 1

# shiroがいなくなっている事がわかる
127.0.0.1:6379> zrange age 0 -1
1) "saburo"
2) "jiro"
3) "taro"

对Hash进行操作

Python中的字典
Ruby中的哈希
Bash中的关联数组

添加和更新哈希

    形式

追加:使用hset命令将值添加到散列名和键名中
更新:使用hset命令更新散列名和键名的值

# 追加
127.0.0.1:6379> hset teammember name taro
(integer) 1
127.0.0.1:6379> hset teammember age 20
(integer) 1
127.0.0.1:6379> hset teammember sex man
(integer) 1

# ageを20から25に更新
127.0.0.1:6379> hset teammember age 25
(integer) 0

显示数值

    形式

通过指定一个键进行显示:使用 hget 命令获取哈希表名称和键名
通过指定多个键进行显示:使用 hmget 命令获取哈希表名称和多个键名
显示所有的值:使用 hvals 命令获取哈希表名称

# 1つだけ表示
127.0.0.1:6379> hget teammember name
"taro"

# 複数表示
127.0.0.1:6379> hmget teammember name age sex
1) "taro"
2) "20"
3) "man"

# すべて表示
127.0.0.1:6379> hvals teammember
1) "taro"
2) "20"
3) "man"

请显示有多少个键。

    • 形式

 

    • hlen hash名

 

# teammemberは3つのキーで構成されている事がわかる
127.0.0.1:6379> hlen teammember
(integer) 3

展示钥匙列表

    形式

哈希名称的hkeys

# teammemberを構成するキー一覧を表示
127.0.0.1:6379> hkeys teammember
1) "name"
2) "age"
3) "sex"

同时显示键和值

    • 形式

 

    • hgetall hash名

 

# 1~3はキー名,4~6は対応する値
127.0.0.1:6379> hgetall teammember
1) "name"
2) "taro"
3) "age"
4) "20"
5) "sex"
6) "man"

指定键并删除

    形式

删除哈希表中的指定键值对。

# 性別の削除
127.0.0.1:6379> hdel teammember sex
(integer) 1

# 削除されていることがわかる
127.0.0.1:6379> hgetall teammember
1) "name"
2) "taro"
3) "age"
4) "25"

删除哈希

    形式

删除哈希名称

127.0.0.1:6379> del teammember
(integer) 1
127.0.0.1:6379> hgetall teammember
(empty array)

对数据进行独占处理

同时进行多个处理
在处理期间不允许其他访问

    注意

请注意无法回滚的情况
可能会导致数据不一致

    形式

处理开始:多重处理

执行处理:执行

强制终止处理:丢弃

# 処理の開始
127.0.0.1:6379> multi
OK

# 処理を一つ一つキューに入れるイメージ
# 処理1
127.0.0.1:6379> incr score
QUEUED

#処理2
127.0.0.1:6379> incr pass
QUEUED

# 処理の実行
127.0.0.1:6379> exec
1) (integer) 1
2) (integer) 1
广告
将在 10 秒后关闭
bannerAds