Ayar sırasında Redis'te bir Sayaç aralığını nasıl önceden tanımlarım. Sayacın önceden tanımlanmış bir MAX ve bir MIN değeri (özellikle benim durumumda MIN değeri 0) olmasını istiyorum, öyle ki değer bu aralığı aşarsa INCR veya DECR bir hata döndürür. Redis Dokümantasyonundan geçtim ve hiçbir cevap bulamadım.Redis için Öntanımlı Bir Sayaç Aralığı Belirleyin
1
A
cevap
0
Redis bu yerleşik girişi sağlamaz, ancak bunu kendiniz oluşturmak için kullanabilirsiniz. Bunu yapmanın birçok yolu var, kişisel tercihim Lua betiklerini kullanıyor - daha fazla arka plan için EVAL
'u oku.
local val = tonumber(redis.call('GET', KEYS[1]))
if not val then
val = 0
end
local inc = val + tonumber(ARGV[1])
if inc < tonumber(ARGV[2]) or inc > tonumber(ARGV[3]) then
error('Counter is out of bounds')
else
return redis.call('SET', KEYS[1], inc)
end
Burada komut satırından bir numune çalışması çıktısı var: Bu durumda
, ben bu komut dosyasını kullanmak istiyorum
$ redis-cli --eval incrbyminmax.lua foo , 5 0 10
(integer) 5
$ redis-cli --eval incrbyminmax.lua foo , 5 0 10
(integer) 10
$ redis-cli --eval incrbyminmax.lua foo , 5 0 10
(error) ERR Error running script (call to f_ada0f9d33a6278f3e55797b9b4c89d5d8a012601): @user_script:8: user_script:8: Counter is out of bounds
$ redis-cli --eval incrbyminmax.lua foo , -9 0 10
(integer) 1
$ redis-cli --eval incrbyminmax.lua foo , -9 0 10
(error) ERR Error running script (call to f_ada0f9d33a6278f3e55797b9b4c89d5d8a012601): @user_script:8: user_script:8: Counter is out of bounds
İlgili konular
- 1. Sınıf için sayaç değişkeni
- 2. belirleyin
- 3. SSE2 için işlemci desteğini belirleyin?
- 4. VB.NET'te Öntanımlı Dialog şablonları?
- 5. Redis slave'leri için HAproxy
- 6. Redis
- 7. Redis
- 8. MSVC'ler _M_X64 Öntanımlı Makro Açıklama
- 9. Bir fonksiyonun nerede yürütüldüğünü belirleyin.
- 10. Histogram oluşturmak için Python'da Sayaç() kullanma?
- 11. Redis kanala abone olan tüm aboneleri listelemek için Redis komutu
- 12. Bir redis slave
- 13. Redis Kümesinde bulunan tüm anahtarları almak için Redis komutu?
- 14. basit jquery ikinci sayaç
- 15. Yağış aralığı aralığı
- 16. Veritabanında artan sayaç
- 17. Magento'daki sayaç sayacı
- 18. Aralığı?
- 19. Önyükleme Aralığı: Önyükleme aralığı aralığı nasıl eklenir?
- 20. JList öğeleri için dinamik olarak bir sayaç gösteriliyor
- 21. Bir sayaç eklemek için çıkış nasıl biçimlendirilir unix
- 22. Cassandra Olmayan Sayaç Aile
- 23. Windows Hizmet Adı belirleyin
- 24. ng -eğer sayaç elle
- 25. Redis bir TTL ile Multi-Set REDIS ise
- 26. aralığı
- 27. Geçerli SQLite satır aralığı aralığı?
- 28. Bir işlem için özel CPU'yu belirleyin - python çoklu işlem
- 29. Golang'ın goroutini kullanırken nasıl bir sayaç uygulanır?
- 30. Serbest ölçek, ancak x/y için aynı panel aralığı aralığı
Güzel cevap !! Yine de 1 şüphe var: Lua Script iş parçacığı güvenli mi olacak? Sunucu 1 ve Sunucu 2'nin Sayacı 1'den 0'a düşürmek için komut dosyasını çağırdığımı varsayalım. Redis'in Tekli işlenmesini umuyordum, aramanın yalnızca biri 0'a dönecek ve diğeri hata döndürecektir. Anlayışımı doğrulayabilir misin? – naves
Teşekkürler ve doğrulanmış - komut dosyaları atomiktir ve engellenir. –
Evet, bazı yazılar da yazdım. Harika çalışıyor. Bu sayacı kodumda başka bir yerden kullanmıyorum, diğer eşzamanlılık sorunları da olmamalı. Cevabınızı doğru olarak işaretledim. Yeterli bir itibarım olduğunda gösterilecek. – naves