資料庫

1.Redis

—–Redis Client套件—– ServiceStack.Redis (主流) StackExchange.Redis CSRedisCore

—–Redis Client 主流套件_ServiceStack.Redis—–

—–Redis Server 前置作業—–

跑Container:docker run –name redis_test -d -p 6379:6379 redis 進入Linux docker exec -it redis_test /bin/bash

進入redis redis-cli

離開redis quit or exit

確認redis版本 redis-cli –version

Config 設定 LRU:最近最少使用,優先淘汰 LFU:使用次數最少,優先淘汰

最大使用記憶體限制 config get maxmemory config set maxmemory 512mb

記憶體釋放策略 config get maxmemory-policy config set maxmemory-policy allkeys-lru

noeviction:預設策略。不進行淘汰,記憶體滿時回傳錯誤。 allkeys-lru:所有 key 均使用 LRU 策略進行淘汰。 volatile-lru:僅針對設有 TTL 的 key 使用 LRU。 allkeys-lfu:所有 key 均使用 LFU 策略。 volatile-lfu:僅淘汰設有 TTL 的 key,依據使用頻率。 allkeys-random:隨機淘汰任意 key,不考慮使用狀況。 volatile-random:隨機淘汰設有 TTL 的 key。 volatile-ttl:淘汰 TTL 剩餘時間最短的 key。

快取效果觀察 info stats

Redis語法參考網路資源 https://www.runoob.com/redis/redis-sets.html

—–Redis語法_新增—– 設定值,key不存在新增,存在則覆蓋 set [key] [value]

設定值,並且10秒後自動過期 set [key] [value] ex 10

—–Redis語法_查詢—– 取值 get [key]

沒有值,回傳nil

keys 查詢,正式運行的伺服器中勿使用 keys *

keys 查詢 scan 0

資料型態查詢 type [key]

—–Redis語法_數值計算—–

值遞增 INCR [key]

指定遞增數 +5 INCR [key] 5

指定遞減數 -3 DECR [key] 3

—–Redis語法_字串處理—–

傳回字串長度 strlen [key]

在字串結尾串接新字串 append [key] [appendString]

—–Redis語法_列表—–

把a元素塞進list1之中(往左側塞入),若無list1則自動建立新的 lpush list a

把a元素塞進list1之中(往右側塞入),若無list1則自動建立新的 rpush list a

把a元素塞進list1之中(往右側塞入),若無list1則塞入失敗 lpushx list a

看arr 0 到100 的元素(-1 代表最後一個項目) lrange arr 0 100

—–Redis語法_不重複集合—–

新增元素 sadd [key] [itemName1] [itemName2]

取得集合數 scard [key]

列出元素清單 sdiff [key] smembers [key]

—–Redis語法_Hash—–

設定hash表 key與value hset [HashTableName] [key] [value]

設定hashmap(一次設定多個set) hmset [HashTableName] [key1] [value1] [key2] [value2]…..

取得hash表所有鍵與值 hgetall [HashTableName]

取得hash表某個鍵的值 hget [HashTableName] [key]

—–集合—–

Redis Client-StackExchange.Redis 網路資源 https://maxlin0523.github.io/2022/06/15/redis-usage/

2.Mongo語法

查看所有資料庫清單 show dbs

切換資料庫,沒有此資料庫,新增資料就會自動建立 use mydb

查看目前在哪個資料庫 db

列出所有集合(資料表) show collections

$gt 大於 $lt 小於 $gte 大於等於 $lte 小於等於 $ne 不等於 $in 在陣列中

範例:

查詢索引 db.users.getIndexKeys() db.users.getIndexes()

建立索引 db.users.createIndex( { ‘Name’: 1, // 1 代表升序 (Ascending) ‘Age’: 1, // 1 代表升序 (Ascending) ‘id’: -1 }, { ‘name’: ‘Name_1_Age_1__id-1’ // (選填) 幫索引取個名字,方便日後管理 } )

確認查詢狀態(有無命中索引) db.users.find({ roleId: { $in: [1,2,3] } }).explain(‘executionStats’) db.runCommand({ explain: { count: ‘users’, query: { roleId: { $in: [1,2,3] } } }, verbosity: ‘executionStats’ })

db.users.find({ roleId: { $in: [1,2,3] } }) db.users.find({ name: { $in: [‘mary’,’joe’] } }) db.users.find({ age: { $gt: 30, $lt: 60 } })

同時符合多個條件 db.users.find({ age: { $gte: 18 }, status: ‘active’ }) db.users.find({ $and: [ { age: { $gte: 18,$lte: 18 } }, { status: ‘active’ } ] })

Or條件 db.users.find({ $or: [ { status: ‘active’ }, { age: { $lt: 18 } } ] })

–單筆資料更新單一欄位 db.collection.updateOne( { _id: ObjectId(‘64fa8fcb5e4b2c12a1d9f123’) }, { $set: { status: ‘active’ } } )

–單筆資料更新多個欄位 db.collection.updateOne( { _id: ObjectId(‘64fa8fcb5e4b2c12a1d9f123’) }, { $set: { status: ‘active’, lastUpdate: new Date() } } )

–單筆資料更新多個欄位 db.collection.updateOne( { _id: ObjectId(‘64fa8fcb5e4b2c12a1d9f123’) }, { $set: { status: ‘active’, lastUpdate: new Date() } } )

–多筆資料更新多個欄位 db.collection.updateMany( { status: ‘inactive’ }, { $set: { status: ‘active’ } } )

–刪除資料 db.collection.updateOne( { _id: ObjectId(‘64fa8fcb5e4b2c12a1d9f123’) }, { $unset: { tempField: ‘’ } } )

排序、限制筆數 db.users.find().sort({ age: -1 }).limit(5) age: -1:依照 age 由大到小排序。 age: 1:依照 age 由小到大排序。 limit(5):只取前 5 筆

分頁查詢:skip + limit db.users.find().skip(10).limit(5) // 跳過前10筆,顯示5筆

使用 .pretty() 美化輸出: db.users.find().pretty()

陣列查詢: db.posts.find({ tags: ‘mongodb’ }) // 查找含有這個 tag 的文章

find() 第一個參數:查詢條件(filter) 第二個參數(可選):欄位投影(哪些欄位要顯示);若要全部顯示,則省略此參數。

範例: db.users.find({ Time: { $gte: ISODate(‘2025-10-21T00:00:00Z’), $lte: ISODate(‘2025-10-21T14:55:00Z’) }, Type: { $in: [1, 6] } }, { _id: 0, Time: 1, HumanType: 1 })

用參數實現查詢結果 let name = ‘John’ db.users.find({ name: name })

建立資料,如果沒有此資料表則會自動建立 db.testcollection.insertOne({ name: ‘Alice’, age: 28 })

刪除第一筆符合條件的資料 db.users.deleteOne({ name: ‘Alice’ })資料

刪除符合條件的資料 db.users.deleteMany({ status: ‘inactive’ })

清空整個集合 db.logs.deleteMany({})

刪除整個集合 db.logs.drop()

刪除整個資料庫 use myDatabase db.dropDatabase()

標籤: redis, mongodb