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()