Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 10

0
votes
answers
60 views
+10

在Redis服務器進程中運行shell命令

0

我在RHEL系統上運行Redis服務器,該服務器需要進程每24小時更新其AFS身份驗證令牌。在Redis服務器進程中運行shell命令

在客戶端代碼,職位數據到數據庫中,我可以通過調用每N POST請求一個shell命令更新AFS令牌(如echo PASSWORD | kinit && aklog

我想實現在服務器類似的東西過程,但我不知道如何去做。是否有任何可用於在Redis服務器進程中運行shell命令的「post-receive-data」回調風格掛鉤?我非常感謝任何其他人可以提供的建議

沙发
0
2

否--Redis服務器不是爲此目的設計的,並非專門用於此目的。如果您確實堅持使用來自Redis服務器的事件來觸發shell命令,你可以通過破解:

  • 尾隨服務器的日誌文件,並尋找一個客戶端調用生成EVAL與調用redis.log功能的Lua腳本的事件。
  • 運行一個基本的本地Redis的客戶一個循環(如redis-cli)從隊列BRPOP S,做的工作,並重復
  • 代碼的東西作爲一種後臺程序的使用Redis的PubSub的接收通過信道消息觸發shell命令
  • 等等...

注:WRT以「Redis的服務器沒有專爲」 - 如果你發現了一些漏洞,讓你做你在做什麼尋找,請將其報告爲嚴重的安全問題。從這個意義上說,你可能想要閱讀http://antirez.com/news/96

+0

謝謝@ItamarHaber,這很有趣,但我擔心我沒有清楚地解釋我的情況 - 我需要從服務器進程運行shell命令,而不是來自外部過程。我相信shell命令必須從運行服務器的進程(或該進程產生的進程)運行,以更新該進程的AFS令牌。 – duhaime

+0

好的,這樣就不可能修改Redis源代碼。 –

0
votes
answers
73 views
+10

快速會話不使用表達式會話存儲在redis中 - 連接redis

0

任何人都有在Redis中存儲表達式會話的工作代碼嗎?快速會話不使用表達式會話存儲在redis中 - 連接redis

Iam創建角度4登錄頁面。我想通過使用Express會話在Redis中存儲用戶會話。

蔭收到錯誤會話未定義

我如何可以查看Redis的的SessionID?

Iam打了這個。任何機構是否面臨同樣的問題?感謝您的幫助

+0

Iam從最近2天開始嘗試,並沒有得到。感謝您的幫助 – Jan

沙发
0
1

您可以通過使用express-sessionconnect-redis來實現它。

一個完整的例子:

const express = require('express'); 
const app = express(); 

const session = require('express-session'); 
const RedisStore = require('connect-redis')(session); 

// Create redis client 
const redis = require('redis'); 
// default client tries to get 127.0.0.1:6379 
// (a redis instance should be running there) 
const client = redis.createClient(); 
client.on('error', function (err) { 
    console.log('could not establish a connection with redis. ' + err); 
}); 
client.on('connect', function (err) { 
    console.log('connected to redis successfully'); 
}); 

// Initialize middleware passing your client 
// you can specify the way you save the sessions here 
app.use(session({ 
    store: new RedisStore({client: client}), 
    secret: 'some secret', 
    resave: false, 
    saveUninitialized: true 
})); 

app.get('/', (req, res) => { 
    // that's how you get the session id from each request 
    console.log('session id:', req.session.id) 
    // the session will be automatically stored in Redis with the key prefix 'sess:' 
    const sessionKey = `sess:${req.session.id}`; 
    // let's see what is in there 
    client.get(sessionKey, (err, data) => { 
    console.log('session data in redis:', data) 
    }) 
    res.status(200).send('OK'); 
}) 

app.listen(3000,() => { 
    console.log('server running on port 3000') 
}) 

/* 
If you check your redis server with redis-cli, you will see that the entries are being added: 
$ redis-cli --scan --pattern 'sess:*' 
*/ 

欲瞭解更多信息,您可能需要閱讀thisthis

希望這會有所幫助!

+0

我也在使用express-session和connect-redis。我嘗試了從redis,client.get(sessionKey,(err,data)=> {console.log('redis中的會話數據:',data) })中獲取您的代碼。但它返回null。它不存儲在redis中。我不確定會話存儲在哪裏。 – Jan

+0

client.get()輸出的'err'對象是什麼? @Jan –

+0

錯誤也會返回'Null' – Jan

0
votes
answers
56 views
+10

使用默認隊列時,類型不包含方法

0

我試圖排隊或安排作業(例如發送郵件)。以下是我在試用/錯誤過程中觀察到的情況:使用默認隊列時,類型不包含方法

  • 在開發和生產環境中,我們使用的是相同的redis服務器。 Redis配置相同,雙方僅使用一個隊列:default。因此,當其他開發人員正在調試代碼時,他們將成爲正在偵聽默認隊列的服務器。
  • 當我試圖排隊或安排一項工作,我最近在我的機器上開發並進行調試時,它不會執行,它在'Retries'部分中看到。方法根本找不到。重試10次後,失敗。 (順便說一句,我使用Enqueue<T>Schedule<T>方法。)
  • 當我介紹一個新的隊列(如測試)在Startup.cs,並與BackgroundJobClientEnqueuedState("test")排隊的新工作,並指定隊列名稱,會立即執行。

在所有這些之後,我沒有得到作業(函數)和隊列之間的關係。有人可以解釋爲什麼我的作業在「默認」隊列中執行時失敗,以及爲什麼他們在不同隊列中執行時成功?

另外,有人可以解釋我爲什麼當我嘗試運行一項工作時遇到「找不到方法」的問題嗎?

我在問這些問題,因爲我想了解所有這些問題背後的真正原因,而不是進行推理。

沙发
0
0

不知道這是否會回答,但我有同樣的問題,並發現了幾件事情,當你使用Schedule(或重複的作業)

  • 隊列名稱的arent支持,只有當你直接Enqueue他們(除非你自定義創建一個系統來支持它)。 See this,這是舊的,但應該仍然有效。

  • 如果你有多個運行hangfire的服務來管理不同類型的作業,一定要給他們每個人一個不同的hangfire數據庫來存儲他們的數據。如果你把他們全部放在同一個數據庫上,當一個工作需要時啓動HF將搜索一個默認隊列來運行它(除非你指定了隊列名稱,但是......見上)。

  • 但是每個服務都會有一個HF服務器,它有一個默認隊列,並且沒有指出哪一個是正確的......所以HF可能會結束嘗試在另一個服務的服務器上運行它,那不會有任何想法因爲它沒有鏈接到正確的代碼庫(again,see this)。另一方面,如果您指定隊列的名稱,並且該名稱只在服務器上「鏈接」到正確的代碼上,那麼HF將在該隊列上運行該作業(同樣,只要您不安排它) ,找到它需要什麼,這樣就可以了

希望這有助於有點

0
votes
answers
66 views
+10

在ec2上安裝開源Redis服務器時出錯

0

我在ec2上安裝Open Source Redis服務器。 我已成功使用我的pem連接到ec2。我已經下載了Redis。 發出以下命令:在ec2上安裝開源Redis服務器時出錯

tar xvzf redis-stable.tar.gz > cd redis-stable. 

下一步:讓& & make install的不工作。

我收到以下錯誤:

~/redis-stable$ make && make install The program 'make' can be found in the following packages: * make * make-guile Try: sudo apt install [email protected]:~/redis-stable$

什麼是需要繼續安裝過程?我需要完成這個安裝/構建過程。我也嘗試了sudo命令,這是一個錯誤。

+0

若要從C源代碼編譯Redis的,你需要的編譯器工具,如「製作」程序,連接器等,還需要對Redis的所有依賴的開發庫和頭文件。 – marekful

+0

請編輯你的文章並添加由'sudo apt install make'生成的錯誤(假設你確實想要構建redis而不是使用預編譯版本) –

沙发
0
0

給下面的命令來安裝所需的依賴

sudo apt-get update 
sudo apt-get install build-essential 

之後,你可以繼續

make && make install 
+0

錯誤:提示:運行'make test'是個好主意;) make [1]:離開目錄'/ home/ubuntu/redis-stable/src' cd src && make install make [1]:進入目錄'/ home/ubuntu/redis-stable/src' CC Makefile。 dep 提示:運行'make test'是個好主意;) INSTALL安裝 安裝:無法創建常規文件'/ usr/local/bin/redis-server':權限被拒絕 Makefile:286:recipe for target'安裝'失敗 使[1]:*** [安裝]錯誤1 make [1]:離開目錄'/ home/ubuntu/redis-stable/src' Makefile:9:目標'install'的配方失敗 make:*** [install]錯誤2 – DataDiva

+0

使用'sudo'並使安裝 – shahin

+0

sudo make && sudo make install – shahin

板凳
0
0

任何具體原因的安裝,你爲什麼會想編譯和安裝Redis的?如果不是,你可以簡單地在下面執行。

sudo apt-get install redis-server

0
votes
answers
57 views
+10

爲什麼1!= 1返回true?

-5
if (responseEntity.getBody().getMeta().getCode() != ApiExceptionEnum.SUCCESS.code()) { 
    return null; 
} 

這樣的代碼,爲什麼1!= 1返回true?

responseEntity.getBody().getMeta().getCode() -> Integer 1 
ApiExceptionEnum.SUCCESS.code() -> Integer 1 

有時它會返回null!

爲什麼?

的響應是從redis的

+2

使用'equals'來比較對象而不是'=='或'!=' – Jens

+0

出於同樣的原因'新Integer(1)== Integer.valueOf(1)'是'false'。 –

+0

謝謝,最後我用Integer.intValue,但是爲什麼當Integer = 1時,這樣的代碼'Integer!= Integer'返回true? –

沙发
0
0

在這種情況下==!=檢查是否比較的對象是指向存儲器中的同一個地方。要比較存儲在比較對象中的值,請使用由Object類的所有Java對象繼承的方法.equals()

+0

當Interger是1時,爲什麼它不會aotuunboxing? –

+0

@JasonYu因爲equals()方法被對象繼承,所以原始類型不被視爲Java中的對象,它們不會繼承任何東西。如果你調用這個方法,這意味着你想比較對象,而不是原始類型 –

0
votes
answers
74 views
+10

Jedis pubsub >>「redis-cli config set notify-keyspace-events Ex」不能從conf文件中工作

0

我們實現了Jedis.expire事件,並傾向於使用KeyExpiredListener類的onPMessage方法來捕獲。Jedis pubsub >>「redis-cli config set notify-keyspace-events Ex」不能從conf文件中工作

 KeyExpiredListener extends JedisPubSub { 
...... 
public void onPMessage(String pattern, String channel, String message) {....} 
.... 
} 

它完美 當我們設置.the在Redis的CLI通知事件。

redis-cli config set notify-keyspace-events Ex 

但不如預期,如果我們重啓Redis的服務器,事件偵聽器切換回默認情況下,捕捉任何情況下,這是相同的設置。

redis-cli config set notify-keyspace-events "" 

所以我們試圖將其設置在redis.conf文件,但它不工作,即不抓住任何事件。

總結,如果我們在CLI

config set notify-keyspace-events Ex 

它的作品集,如果我們的conf文件(redis.conf)設置

notify-keyspace-events Ex 

這是行不通的。

謝謝!使用的conf目錄

沙发
0
1

開始的Redis -

./redis-server <path of redis.conf> & 

現在(通知-密鑰空間事件例)將致力於其在redis.conf提及。

0
votes
answers
66 views
+10

Azure Redis緩存授權標頭

0

我正在研究Azure Redis緩存,並且我正在使用REST API來創建緩存。我得到的迴應是:Azure Redis緩存授權標頭

HTTP/1.1 401 Unauthorized 
{ 
    "error": { 
    "code": "AuthenticationFailed", 
    "message": "Authentication failed. The 'Authorization' header is missing." 
    } 
} 

我在文檔中找不到任何Authorization header。有人可以建議生成授權標題的過程嗎?

+0

嘿@Cylian。你可以幫助我與授權頭部分? – badcoder29

+0

我猜你試圖使用此鏈接創建Redis緩存帳戶 - https://docs.microsoft.com/en-us/rest/api/redis/Redis/Create? –

+0

@GauravMantri是的,我使用相同的鏈接。我正在嘗試使API調用來設置緩存。但它要求授權標題。我不知道如何生成它? – badcoder29

沙发
0
0

基本上創建Azure Redis Cache帳戶操作是Azure Resource Manager (ARM)操作。每個ARM操作都需要一個authorization標頭,該標頭必須包含在請求中。由於您未在請求中包含此標頭,因此您收到此錯誤。

有關如何驗證您的ARM API請求的詳細說明,請參閱Resource Manager REST APIs

0
votes
answers
65 views
+10

如何設置redisearch默認限制的限制是10。我想設置50

1
from redisearch import Client 

client = Client('myIndex') 
res = client.search(search_key) 

我需要50個結果res如何設置redisearch默認限制的限制是10。我想設置50

沙发
0
3

閱讀文檔 - 您需要使用查詢對象的paging方法:http://redisearch.io/python_client/#paging

0
votes
answers
74 views
+10

Laravel 5廣播事件到通配符通道使用節點和Laravel ECHO-服務器

0

我有兩個角色,醫生,患者和...Laravel 5廣播事件到通配符通道使用節點和Laravel ECHO-服務器

當病人沒有動作A,我希望有一個廣播出去一醫生列表,而不是所有的醫生,但他們的名單..

在我的測試中,我能夠通過訂閱與節點的redis到通道前綴醫生和連字符然後用戶ID ...

redis.subscribe('Doctor-1', function(err, count) { 
}); 

但是,對於生產,我不能硬編碼該ID,我需要的是某些興象下面

redis.subscribe('Doctor-*', function(err, count) { 
}); 

但通配符似乎不工作...

如何,我可以訂閱一個通配符任何想法?

沙发
0
2

Redis.io, PubSub Documentation

Wikipedia, Glob Programming

Redis的發佈/訂閱實現支持模式匹配。客戶端 可以訂閱全局樣式以接收發送到與給定模式匹配的頻道名稱的所有消息。

例如:

PSUBSCRIBE news.* 

所以,你的片斷可以改變爲

redis.subscribe('Doctor.*', function(err, count) {}); 

所以將深入

收到任何針對醫生與ID Doctor.1以上

Doctors.<groupId>.<DoctorId>等上。

0
votes
answers
66 views
+10

Redis處理排隊管理機制

1

在使用Redis處理排隊系統時,我可能會用錯誤的思維方式,這就是爲什麼我需要你們爲此提供幫助。Redis處理排隊管理機制

所以,我有這個相當簡單的隊列,負責將電子郵件堆疊到一個集合上,然後檢索堆棧的可用電子郵件並分發它。

該系統是在NodeJS中構建的,因此我正在使用node-redis lib。

隊列(堆棧)應該是不斷可用的,一個點在其上添加(推送)新的電子郵件,另一個則彈出第一個被推入的項目。

對於這種方法,我可能會想到JavaScript'ish,以及我在Redis文檔中發現的內容,可能不太合適,所以在這裏我來找你們來幫助我在談論Redis時獲得正確的思維方式語言。

用一個簡單的例子,在JSON,這裏是我的隊列堆:

queue = [ 
{ 
    _id: 5a05eec08a7e66eb10ad6361, 
    email: "some html content in here", 
    domain: "domain.com" 
}, 
{ 
    _id: 5a05eb785710017b7d7a0243, 
    email: "some more html content here", 
    domain: "domain.com" 
}, 
... 
] 

而且通過看Redis Documentation 我發現我可以做這樣的事情每個電子郵件推入堆棧:

HMSET queue:5a05eec08a7e66eb10ad6361 email "some html content in here" domain "domain.com" 
HMSET queue:5a05eb785710017b7d7a0243 email "some more html content here" domain "domain.com" 

,而我可以明確地檢索一個 '集' 是這樣的:

HMGET queue:5a05eec08a7e66eb10ad6361 email 
HMGET queue:5a05eec08a7e66eb10ad6361 domain 
HMGET queue:5a05eb785710017b7d7a0243 email 
HMGET queue:5a05eb785710017b7d7a0243 domain 

直到這一點,一切都非常香草。但問題在於,當它涉及到一個排隊系統時,必須使用語言/數據庫爲您提供的PUSH和POP功能。

我確實能夠找到Redis提供的PUSH和POP機制,但我只能在處理單個尺寸的KEY時使用它。

所以,在我的情況,而不是彈出一個單一的項目,如:

RPOP email 

我真正需要的是這樣的:

RPOP queue //see the abstraction here? calling the stack and not a single item? 

隨着又將回到我 - 在同時間刪除 - 此隊列集合中的最後一個項目。

所以,

RPOP queue //or whatever other command I couldn't find 

應該給我

{ 
    _id: 5a05eec08a7e66eb10ad6361, 
    email: "some html content in here", 
    domain: "domain.com" 
} 

...然後,用另一個

RPOP queue 

回我

{ 
    _id: 5a05eb785710017b7d7a0243, 
    email: "some more html content here", 
    domain: "domain.com" 
} 

等等,直到它呈現這個「隊列」爲空。

我希望自己清楚自己的心態,以及問題本身。

我不能使用HMGET機制,對於任何隊列,而一端可能會從底部彈出的項目,另一端可能被堆放在它之上的新項目中的代碼進行迭代。所以,通過編寫一些「重組索引」機制來保持一定程度的黑客行爲。

至此,我開始相信Redis不會爲我提供必要的工具來支持這種「多維」堆棧方法。不錯,恕我直言,Redis可能不是我需要的答案。

但是我知道我現在可能會有錯誤的觀念,可能Redis提供了一種優雅的方式來處理這個問題,但是從完全不同的方法來看。我不會僅僅使它與RPUSH和LPOP一起工作,因爲正如我已經提到的那樣,它只是爲我提供了一種處理簡單的單維KEY VALUEs的方法。

如果Redis沒有爲此提供某些支持,我已經在NodeJS端點實施了一種解決方法。但是你知道,更多的代碼意味着更多的潛在錯誤。

和平

沙发
0
1

你並不需要打破你的隊列中的內容轉換成離散的哈希值,除非你打算訪問他們的子元素。如果你我理解正確,你需要的是經典的LPUSH/RPOP列表隊列模式。在該列表中的成員可以是任何東西,但在你的情況下,最簡單的是隻存儲每個元素的原始序列化JSON,如:

LPUSH queue '{_id: 5a05eec08a7e66eb10ad6361, email: "some html content in here", domain: "domain.com"}' 
+0

謝謝@埃文 - 哈伯,這是一個非常簡單的事情,但我看不到它,因爲我在考慮對於Popping/Pushing對象,我需要像LMHPUSH/RMHPOP那種奇怪的東西。 這解決了我的疑問,並解決了暴露問題的思維。 –

+1

太棒了 - 隨時可以回來進行進一步的思維調整;) –