oracle緩存redis
1. 在不影響性能的情況下,怎麼快速批量刪除redis數據
業務場景: redis數據切換到Oracle,取消持久化,redis只做緩存
具體需求: 從redis從庫里獲得了400w個無過期時間的hashkey,需要在主庫中將其刪除
矛盾點:1.如果直接批量刪除會導致redis擁塞,影響正常業務2.如果每刪除一個key,sleep50ms,不會影響業務,但是根據經驗要跑兩天
最終問題: 在不影響性能的情況下,怎麼快速批量刪除redis數據?
Redis刪key刪得飛快,400w也不在話下。我懷疑其實瓶頸在於網路。
如果你是一個一個key刪的,每次發送一個命令都會導致客戶端等待redis的回復,浪費了大量網路帶寬。
可以試試用pipelining/transactions。在不飽和redis端網路帶寬的前提下,以最大速度發送命令,然後一次執行。
如果這都不行的話,可以寫一個Lua腳本,識別並刪除無用的key,發送到redis用eval執行。這樣應該不會阻塞網路。
如果這樣還是影響業務的話。。終極解決方案是創建一個master/slave,在slave上刪除key,而將請求用master處理。刪完key之後把slave晉升成master,再將請求轉向它。
2014年07月24日回答
滕亦飛1.3k
嘗試下 redis 的 eval 命令。
例如刪除 old-fashioned: 開頭的所有 KEY
eval "redis.call('del', unpack(redis.call('keys','old-fashioned:*')))" 0
如果單次刪除性能消耗大,可以考慮分批刪除。
2. Redis-Redis可以作為一個資料庫使用嗎
redis 能不能做資料庫,要看你具體的需求了。
1. 像樓上各位大牛提到的,redis的持久化有問題,如果 使用aof模式,並且fsync always,則性能比mysql 還低,如果你喜歡redis 方便的數據結構而對性能要求不高,或者性能要求很高,但允許一定程度的丟失數據,則可以用redis做為資料庫。
2. redis 是內存資料庫, 內存寫滿後,數據不會存儲到硬碟上(VM 不穩定,diskstore未啟用),如果你內存足夠大,則可以用redis作為資料庫。
3. redis與oracle之間怎麼實現數據同步
他們兩個之間沒有直接同步的方法,這個依賴於你的架構設計
1,插入時同步,比如先更新了oracle,再更新redis,這個要靠代碼邏輯來做。誰先誰後得看設計了。
2,查詢時同步,這時你的redis是做緩存來用,那麼它的更新依賴於你設定的邏輯,比如查詢一條記錄,先查redis,redis中沒有此數據,那麼查詢oracle,查詢完畢後,把數據插入到redis,這樣以後再查詢此記錄,先查redis就可以獲取了,速度更快一些。
3,定時同步,根據你後台的同步邏輯,根據某些條件,把數據插入到redis,比如每天某個時刻,把oracle中的某些數據,插入到redis。
4, 完整同步, 就是你的redis和oracle存儲同樣數據量的數據,這個建立過程上面的第一條可以做到,前提是在沒有數據應用的時候都是同時上線,這樣數據就都一致了,但如果已經用了oralce,現在增加了redis,那麼第一條方式就不滿足了,可以通過第二,第三兩個情況來逐步滿足。
4. redis,memcache 與 mysql ,oracle 的區別,都叫資料庫嗎
redis,memcache 現在歸於nosql 這塊,就是 not only sql ,它們出現一方面是緩存使用,提升性能,一方面是為了處理 關系型資料庫不好處理或者不能處理的 非結構化數據。
5. redis,memcache 與 mysql oracle 的區別,都叫資料庫嗎
redis,memcache是緩存,其實就是內存資料庫
mysql oracle是傳統的物理資料庫
6. 總是聽說很多javaweb系統用redis或memcache做緩存,具體怎麼操作的
其實就相當於在應用程序和資料庫之間開了一塊內存區域,將一些高頻訪問的數據放在其中,避免每次都請求資料庫。至於之所以用memcached和redis,而不是自己在程序里開個hashmap,是因為這塊區域可以共享且容易管理,在集群環境下更方便使用。
有些做法是直接將數據序列化後存在redis的string或是memcached中,也有些其他做法是利用redis特有的數據結構存儲一些關系,例如用sorted set存排行榜,string用來計數,set做一些倒排索引、用戶好友關系之類的。我覺得這些都可以稱之為緩存。
7. redis在什麼情況下使用
常見的說法是,有N多熱點數據,又是臨時用一下,又想提高並發速度,吞吐量,那就可以考慮,如淘寶的節假日的銷售活動。提前把數據准備好,活動完後失效。
我的看法,有足夠多的內存,我又想讓系統極快。就可以把redis當資料庫用,redis可以永久緩存數據,但是這些數據要小於能使用的內存量。小點的項目比較適合,我干過這事。
介面級別緩存一定量網路請求數據,省去自己設計的緩存不安全,不完善的麻煩。比如開發微網站:要緩存的微信的認證串,用戶認證數據。cookie,session等。我同樣干過這事,跟第二段一起做的。前提是數據量適中,現有機器配置,可以5年以上不出問題。
還有人會結合mysql或oracle使用,緩存用戶查詢的數據。對小項目我個人以為沒必要的。大項目功能如第一點。在小項目中,mysql或oracle自己就可以把所有的表、數據等直接載入到內存中。數據預熱後,訪問效率一點不差。秒以內可以從2000W以上的數據中找出REGEXP寫的查詢。我同樣也干過這事。多線程+mysql全部載入到內存+查詢結果合並不會超過1秒。2秒以內把查詢結果展現出來。
總之redis不是大項目的專利,看你能想到什麼地方,就能用到什麼地方。使用redis的根本出發點是快+高並發。
8. redis 一個資料庫能存多少數據
redis和mysql的區別非常大。具體如下:mysql中一個中小型的網路資料庫,比oracle和sqlserver小,
但是並發能力遠超過acess這樣的桌面資料庫。redis是一個支持網路、可基於內存亦可持久化的日誌型、key-value資料庫。可以認為redis比mysql簡化很多。mysql支持集群。現在大量的軟體使用redis作為mysql在本地的資料庫緩存,然後再適當的時候和mysql同步.
9. window系統中redis怎麼安裝在oracle資料庫伺服器
下載地址github.com/dmajkic/redis/downloads。下載到的Redis支持32bit和64bit。根據自己實際情況選擇,我選擇32bit。把32bit文件內容拷貝到需要安裝的目錄下,比如:D:\dev\redis-2.4.5。
打開一個cmd窗口,使用cd命令切換到指定目錄(D:\dev\redis-2.4.5)運行 redis-server.exe redis.conf 。
重新打開一個cmd窗口,使用cd命令切換到指定目錄(D:\dev\redis-2.4.5)運行 redis-cli.exe -h 127.0.0.1 -p 6379,其中 127.0.0.1是本地ip,6379是redis服務端的默認埠。
這樣,Redis windows環境下搭建已經完成。
環境已經搭建好,總得測試下吧。比如:存儲一個key為test,value為hello word的字元串,然後獲取key值。