導航:首頁 > 編程語言 > redisjava查詢

redisjava查詢

發布時間:2023-05-17 23:36:49

1. java代碼中 單表查詢出的list集合 怎麼讀寫到redis中

查詢出來的結果集是返回一個List,然後你倒序添加數據到redis裡面就可以了。
// 返回一個資料庫查詢結果集,list
List<Map> list = userService.getUserList();

//倒序把數據放進去就好了,不然取出來的數據,跟你查詢出來的結果數據是相反的
for (int i = list.size() - 1; i >= 0; i--) {
RedisPool.getClient().lpush("userList", list.get(i).toString());
}
----------------------------下面是RedisPool類-------------

import redis.clients.jedis.Jedis;

/**
* redis緩存運用
*
* @author TongJun
*
*/
public class RedisPool {

// redis 對象
private static Jedis jedis = null;
private static final String IP = "127.0.0.1";
private static final int PROT = 6379;

/**
* 單例模式構造redis對象
*
* @return
*/
public static synchronized Jedis getClient() {
if (jedis == null) {
jedis = new Jedis(IP, PROT);
}
return jedis;
}

}

2. 關於java redis的操作jedis的疑問

ava操作redis的jedis的范圍查詢是怎麼寫的? 我要從一個范圍到另一個范圍的區間

我試過了,
List userList = jedis.lrange("userList", 0, -1);

Set user = jedis.zrange("user", 0, -1);

這兩個范圍查詢的得到結果,為何都是 0

但是我用 Set str =jedis.keys("tes2:*");

發現是用完整的數據的,我一次性讀取這么多數據,redis直接socket失敗了
它是專為 .NET 平台設計的一種靜態類型編程語言。 Nemerle 中的程序會被編譯成中間語言位元組碼。它支持函數式,命令式以及面向對象編程。

3. 如何用java獲取redis的info

預備
jedis-2.5.2
commons-pool2-2.2.jar
使用單連接
此方式僅建議用於開發環境做調試用。
// 創建連接
String host = "192.168.56.102";
int port = 6379;
Jedis client = new Jedis(host, port);
// 執行set指令
String result = client.set("key-string", "Hello, Redis!");
System.out.println( String.format("set指令執行結果:%s", result) );
// 執行get指令
String value = client.get("key-string");
System.out.println( String.format("get指令執行結果:%s", value) );
運行上述代碼,控制台輸出:
set指令執行結果:OK
get指令執行結果:Hello, Redis!
使用連接池
此方式適用於僅使用單個Redis實例的場景。
// 生成連接池配置信息
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(30);
config.setMaxWaitMillis(3*1000);

// 在應用初始化的時候生成連接池
JedisPool pool = new JedisPool(config, "192.168.56.102", 6379);

// 在業務操作時,從連接池獲取連接
Jedis client = pool.getResource();
try {
// 執行指令
String result = client.set("key-string", "Hello, Redis!");
System.out.println( String.format("set指令執行結果:%s", result) );
String value = client.get("key-string");
System.out.println( String.format("get指令執行結果:%s", value) );
} catch (Exception e) {
// TODO: handle exception
} finally {
// 業務操作完成,將連接返回給連接池
if (null != client) {
pool.returnResource(client);
}
} // end of try block

// 應用關閉時,釋放連接池資源
pool.destroy();

運行上述代碼,控制台輸出:

set指令執行結果:OK
get指令執行結果:Hello, Redis!
使用連接池+分布式
在規模較大的系統中,往往會有多個Redis實例做負載均衡。並且還實現主從備份,當主實例發生故障時,切換至從實例提供服務。
類似於Memcached的客戶端,Jedis也提供了客戶端分布式操作的方式,採用一致性哈希演算法
// 生成多機連接信息列表
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
shards.add( new JedisShardInfo("127.0.0.1", 6379) );
shards.add( new JedisShardInfo("192.168.56.102", 6379) );

// 生成連接池配置信息
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(30);
config.setMaxWaitMillis(3*1000);

// 在應用初始化的時候生成連接池
ShardedJedisPool pool = new ShardedJedisPool(config, shards);

// 在業務操作時,從連接池獲取連接
ShardedJedis client = pool.getResource();
try {
// 執行指令
String result = client.set("key-string", "Hello, Redis!");
System.out.println( String.format("set指令執行結果:%s", result) );
String value = client.get("key-string");
System.out.println( String.format("get指令執行結果:%s", value) );
} catch (Exception e) {
// TODO: handle exception
} finally {
// 業務操作完成,將連接返回給連接池
if (null != client) {
pool.returnResource(client);
}
} // end of try block

// 應用關閉時,釋放連接池資源
pool.destroy();

運行上述代碼,控制台輸出:

set指令執行結果:OK
get指令執行結果:Hello, Redis!

4. 如何用Java和Redis設計一個高效的先入先出的隊列

分析:
redis的list底層是多個ziplist結構組成的「雙向」鏈表。中間部分還壓縮了一下。
最外層是由兩個哈希表構成的dict。
哈希表的get(key)時間復雜度為O(1),而且這個O(1)理論上不會因為所佔內存的大小和元素數目所改變。list的出隊列和入隊操作也都是O(1)。
Java的隊列時間復雜度也應為O(1)。

可不可以直接用redis的list做先進先出?

情況1,數據數量不多,可以用
情況2,數據量多,但存的數據是激活碼這樣簡單值一類,可以用。
情況3,list存的是要獲取數據的索引,大量數據的值已經存在redis的KV結構中。
這時候,如果數據每次獲取下一個數據都要執行redis的hash查找(O(1))然後redis的list從頭或者末尾出一個。經過網路IO返回,Java程序在用出來的key去請求redis去get(key) (O(1))。這里是兩次網路IO或者進程間的IO。
這時候,可以不用redis的list存索引而只是用redis大的KV哈希結構存鍵值。用①Java的隊列先進先出獲取下一個key或者②使用預先規定好的鍵生成的規則,讓鍵是有規則有順序的,比如自增ID,然後每次獲取都是ID++,而直接從redis.get(ID.next());來獲取值。

最後一種就是最高效的辦法,為了特殊場景的高效出隊列而設計。但是如果只是一般的數據量,使用redis的list也未嘗不可。

閱讀全文

與redisjava查詢相關的資料

熱點內容
pr怎麼壓縮文件大小 瀏覽:859
查看oracle字元集命令 瀏覽:175
鋰電池增加密度 瀏覽:657
linux用戶密碼忘記 瀏覽:240
gb壓縮天然氣 瀏覽:633
圖片拼接不壓縮app 瀏覽:668
我的世界如何編程 瀏覽:84
vue反編譯代碼有問題 瀏覽:948
linuxshell字元串連接字元串 瀏覽:51
androidviewpager刷新 瀏覽:438
python編程計算平均分 瀏覽:678
加密數字貨幣市值查詢 瀏覽:692
時尚商圈app怎麼樣 瀏覽:584
stacklesspython教程 瀏覽:138
用命令行禁用135埠 瀏覽:212
linux防火牆編程 瀏覽:627
pdf閱讀器刪除 瀏覽:979
考研人如何緩解壓力 瀏覽:822
買電暖壺哪個app便宜 瀏覽:505
洛克王國忘記伺服器了怎麼辦 瀏覽:782