コンテンツ
序文
Redisは非常に便利なデータベースです。キーと値のペアのアクセス方法は非常にシンプルです。キャッシュとしてよく使用されます。データベースキャッシュとしての使用方法、redisリモート接続障害の問題、redisデータ損失の問題、2つの永続的な構成RDBとAOF。
インストール
ウィンドウズ
Redisの公式ウェブサイトではウィンドウバージョンのダウンロードは提供されていません。パッケージredis-win64をアップロードしてインストールしました。
Linux
公式ウェブサイトからダウンロード:redis公式ウェブサイト
起動
Windowsはサービスとして開始します
内部のRedis-x64-3.2.100.zipを適切な場所に解凍し、名前をRedisに変更します。
cmdはRedisに入り、次のコマンドを実行してサービスを開始します。
redis-server.exe --service-install redis.windows.conf --loglevel verbose
redis-server --service-start
その他のコマンド:
- サービスをアンインストールします。
redis-server --service-uninstall
- サービスを開始します。
redis-server --service-start
- 故障中:
redis-server --service-stop
- サービスの名前を変更します。
redis-server --service-name name
Linuxはサービスとして開始
パゴダ(推奨)
Pagoda linuxは、自動開始サービスを直接インストールできます。
手動インストール
解凍
tar -xzvf redis-6.2.6.tar.gz
入力
cd redis-6.2.6
インストール
make & make install
ディレクトリにsrcまたはbinディレクトリがあるかどうかを確認し、srcまたはbinディレクトリを入力して、開始します。
./redis-server
テスト
残りのコンテンツテストはすべてWindowsの操作です。
Redisへのcmd
redis-cli
set test 123
get test
nodejsで使用
ガイドパッケージ
npm i redis
使用する
redisのさまざまな操作は非同期であるため、非同期関数でラップします。これははるかに便利です。
import {
createClient} from 'redis'
(async () => {
//创建redis客户端
const redis = createClient()
//连接
await redis.connect()
//set
await redis.set('test', '123')
//get
const value = await redis.get('test')
console.log(value)//123
})()
Expressとのインターフェースで使用
express
これはさらに(サービス)とcors
(クロスドメインを解決する)をインポートし、すべての作成を非同期関数のスコープに入れます。
import express from 'express'
import cors from 'cors'
import path from 'path'
import {
createClient} from 'redis'
(async () => {
const app = new express()
app.use(express.json())
app.use(cors())
app.use(express.static(path.resolve('./img')))
const redis = createClient()
await redis.connect()
app.get('/getValue', async (req, res) => {
await redis.set('key', 'value')
const value = await redis.get('key')
res.send({
value})
})
app.listen(3000, () => {
console.log('服务器启动')
})
})()
フロントエンドテスト
<body>
<button onclick="test()">获取信息</button>
<script>
const test = async () => {
const res = await fetch('http://localhost:3000/getValue')
const data = await res.json()
console.log(data)
}
</script>
</body>
データベースキャッシュとしてのredis
import express from 'express'
import cors from 'cors'
import path from 'path'
import {
createClient} from 'redis'
(async () => {
const app = new express()
app.use(express.json())
app.use(cors())
app.use(express.static(path.resolve('./img')))
const redis = createClient()
await redis.connect()
const cache = async (req, res, next) => {
//尝试读取缓存中的数据
const value = await redis.get('key')
if (value) {
res.send({
value: '数据来自缓存:' + value})
} else {
//不存在则去进行数据库读取
next()
}
}
app.get('/getValue', cache, async (req, res) => {
//这里偷个懒用databaseValue代替数据库读取来的数据
const databaseValue = 'value'
//用setEx函数存入redis,中间的数字代表缓存时间,这里设置为5秒方便测试
await redis.setEx('key', 5, databaseValue)
const value = await redis.get('key')
res.send({
value: '数据来自数据库:' + value})
})
app.listen(3000, () => {
console.log('服务器启动')
})
})()
フロントエンドの内容は変更されておらず、テストは継続的に要求されます。
データベースから読み取られたコンテンツは5秒間キャッシュされ、5秒以内のリクエストはキャッシュから送信されることがわかりました。
キャッシュ時間が経過すると、データベースから読み取られて再びキャッシュに格納されるため、データベースへの負荷が軽減されます。
Redisリモート接続障害の問題
Windowsはredisディレクトリを変更しredis.windows.conf
、Linuxはそれを変更しredis.conf
ます。
コメントbind 127.0.0.1
、保護モードをオフprotected-mode
に設定しno
ます。
サービスを再インストールします。
redisの永続性
redisデータが誤って失われやすい場合や、永続的なデータを保存する必要がある場合があるため、永続化する必要があります。
永続性には、との2つのタイプがありRDB
ますAOF
。
ここでは面接の質問を紹介しないので、簡単に理解できる2つのタイプの詳細な意味を詳しく紹介しません。
-
RDB
規則に従い、バックアップデータは定期的にハードディスクに書き込まれ、データが失われたときにバックアップデータが読み取られます。 -
AOF
毎回redis操作を保存し、データが失われた場合は、保存した元のredis操作を順番に実行し、対応するデータを再生成します。
RDB構成
次のオプションを追加した後redis.conf
、redisサービスを再起動します。
save 900 1 # 900s内至少达到一条写命令
save 300 10 # 300s内至少达至10条写命令
save 60 10000 # 60s内至少达到10000条写命令
AOF構成
次のオプションを追加した後redis.conf
、redisサービスを再起動します。
# 开启aof机制
appendonly yes
# aof文件名
appendfilename "appendonly.aof"
# 写入策略,always表示每个写操作都保存到aof文件中,也可以是everysec或no
# always保存每次操作最安全
# everysec每秒保存一次,最多可能会丢失1s数据
# no交给操作系统控制,未知因素更多,最不安全
appendfsync always
# 默认不重写aof文件
no-appendfsync-on-rewrite no
# 保存目录
dir ~/redis/
終わりの言葉
ここを見ると、redisの使い方をマスターしていると思います。記事が悪くないと思われる場合は、気に入って集めてください。間違いや提案があれば、メッセージを残してください。ありがとうございます〜