1. 程式人生 > >REDIS實踐之請勿踩多程序共用一個例項連線的坑

REDIS實踐之請勿踩多程序共用一個例項連線的坑

最近在做一個主程序fork出多個子程序的專案時候,一開始,想在主程序之前 new redis出一個例項,讓fork出的多個子程序共用這個例項,但是總感覺有哪裡不妥!

思來想去,想到這麼個例子來證明這麼做的可怕性

首先在redis裡面建了一個 【1-8,除去4】的集合體


然後在程序裡面有加入這麼段程式碼:


把不為集合成員的4卻返回true  和  為集合成員的【1,2,3,5,6,7,8】卻返回false的情況記錄下來,結果


得出了一堆這樣的錯誤情況記錄,所以說多程序千萬不能共用一個redis例項

總結:

必須每個程序單獨建立redis/mysql連線,其他的儲存客戶端同樣也是如此。原因是如果共用1個連線,那麼返回的結果無法保證被哪個程序處理。持有連線的程序理論上都可以對這個連線進行讀寫,這樣資料就發生錯亂了。

所以在多個程序之間,一定不能共用連線


相關推薦

REDIS實踐請勿程序共用一個例項連線

最近在做一個主程序fork出多個子程序的專案時候,一開始,想在主程序之前 new redis出一個例項,讓fork出的多個子程序共用這個例項,但是總感覺有哪裡不妥! 思來想去,想到這麼個例子來證明這麼做的可怕性 首先在redis裡面建了一個 【1-8,除去4】的集合體 然

Android最佳實踐性能 - 線程

ndt andro 單位 多線程 same Coding amount other err 在單獨線程執行代碼 參考地址:http://developer.andr

REDIS實踐使用sort set完成商品篩選排序

我們知道 redis中 有個用來排序的函式 sort,我們先看看手冊對它的描述 描述:按條件取得資料 引數: array( 'by' => 'pattern', //匹配模式 'limit' => array(0, 1), 'get' => 'patt

爬蟲學習14:程序爬取簡書社會熱點資料儲存到mongodb

   本程式碼爬取簡書社會熱點欄目10000頁的資料,使用多程序方式爬取,從簡書網頁可以看出,網頁使用了非同步載入,頁碼只能從response中推測出來,從而構造url,直接上程式碼:import re

REDIS實踐線上人數統計幾種方案分析

線上人數統計業務是我們開發web肯定要設計的業務邏輯,本文就會給出幾種設計方案,來分析下各個方案的優缺點: 使用有序集合這種方案能夠同時儲存線上的使用者 和 使用者上線時間,能夠執行非常多的聚合計算,但是所消耗的記憶體也是非常可觀的。 使用集合這種方案能儲存線上的使用者,

多媒體專案中場景共用一個AudioSource的方法

在多場景中,有時需要共用一個Audio控制元件。我們可以通過使用不銷燬物體的方法解決這個問題。  首先,我們需要新建一個預製體,包含Audiosource控制元件,並且將改物體的tag改為“sound”; 每次進入場景時檢查場景中是否存在該prefab,若不存在則載入。下

PHP程序引發的msyql連線數問題

PHP多程序引發的msyql連線數問題 業務中有一塊採用了PHP的pcntl_fork多程序,希望能提高效率,但是在執行的時候資料庫報錯 PDO::prepare(): Premature end of data (mysqlnd_wireprotocol

UI自動化問題記錄所有模組測試類共用一個driver

問題背景:公司的自動化程式碼,自己剛開始編寫時,每一個類中都寫了使用者登入、使用者退出的程式碼,這樣保證了每次登入所做的操作都是一個新的用例,沒有前後依賴,然而這樣寫登入、退出次數太多,經理想讓我實現只做一次登入和一次退出,就可以執行所有的用例程式碼; 解決工程:剛開始想的是使用testNG的註

Android下程序訪問SharedPreferences遇到的

最近專案中遇到了跨程序訪問SharedPreferences的問題,當然在Android中並不建議用SharedPreferences,比較建議使用contentProvider或者aidl的方式來互動。 首先為了方便理解,暫時把兩個應用分為Server端和client端

nginx實現伺服器共用一個80埠

一、下載nginx。 我使用的版本是1.7.2 二、部署專案 下面我有兩個專案A和B,分別使用兩個tomcat:tomcatA和tomcatB,分別把專案A部署到tomcatA和專案B部署到tomcatB裡面去。 1. 找到tomcatA下的conf資料夾,找到server.xml檔案。修改埠號

c#Redis實踐list,hashtable

hashtable 轉載 itl red ref png clas logs sun 寫在前面 最近公司搞了一個活動,用到了redis的隊列,就研究了下redis的相關內容。也順手做了個demo。 C#之使用Redis 可以通過Nuget安裝Reidis的相關程序集。安裝

Redis進階實踐二如何在Linux系統上安裝安裝Redis

進行 redis-cli windows 也會 www. 有關 目標 onf 名稱 原文:Redis進階實踐之二如何在Linux系統上安裝安裝Redis一、引言 上一篇文章寫了“如何安裝VMware Pro虛擬機”和在虛擬機上安裝Linux操作系統。那是第一步,有

Redis進階實踐十一 Redis的Cluster集群搭建

key 第一個 class 分布式 開關 rep redis 3.0 應用程序 嘗試 原文:Redis進階實踐之十一 Redis的Cluster集群搭建一、引言    本文檔只對Redis的Cluster集群做簡單的介紹,並沒有對分布式系統的所涉及到的概念做深入的探

Redis進階實踐Redis的基本數據類型

規模 card 擴展 系統 fse nat 四大 軟件使用 html 轉載來源:http://www.cnblogs.com/PatrickLiu/p/8328669.html 一、引言 今天正式開始了Redis的學習,如果要想學好Redis,必須先學好Redi

知乎技術分享:從單機到2000萬QPS並發的Redis高性能緩存實踐

周期性 聯網 .html twemproxy 級別 space oev container 基數 本文來自知乎官方技術團隊的“知乎技術專欄”,感謝原作者陳鵬的無私分享。 1、引言 知乎存儲平臺團隊基於開源Redis 組件打造的知乎 Redis 平臺,經過不斷的研發叠代,目前

Python爬蟲執行緒,程序

前言 我們之前寫的爬蟲都是單個執行緒的?這怎麼夠?一旦一個地方卡到不動了,那不就永遠等待下去了?為此我們可以使用多執行緒或者多程序來處理。 首先宣告一點! 多執行緒和多程序是不一樣的!一個是 thread 庫,一個是 multiprocessing 庫。而多執行緒 thread 在 Pytho

node總結程序瞭解下

Node.js 是以單執行緒的模式執行的,但它使用的是事件驅動來處理併發,這樣有助於我們在多核 cpu 的系統上建立多個子程序,從而提高效能,其中,每個子程序總是帶有三個流物件:child.stdin, child.stdout 和child.stderr。他們可能會共享父程序的 stdio 流

Redis進階實踐三如何在Windows系統上安裝安裝Redis

Redis進階實踐之三如何在Windows系統上安裝安裝Redis 一、Redis的簡介         Redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括strin

Python 程序並行程式設計實踐: multiprocessing 模組

Python 多程序並行程式設計實踐: multiprocessing 模組 2017/04/17 · 實踐專案 · multiprocessing, 多程序, 並行 本文作者: 伯樂線上 - iPytLab&n

python程序模組multiprocessing

程序: python裡程序是multiprocessing模組 用法和多執行緒沒有什麼區別(os.getpid()是獲得程序號,ppid是父程序號) import time ,os import multiprocessing def f(name): time.sleep(