導航:首頁 > 編程語言 > 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查詢相關的資料

熱點內容
jquery源碼講解 瀏覽:280
寶馬app如何發帖 瀏覽:861
重慶伺服器託管商雲空間 瀏覽:439
浦發銀行app如何調流水 瀏覽:677
玉石鑒賞pdf 瀏覽:842
為什麼小度APP一直連不上網路 瀏覽:163
pdf模板java 瀏覽:40
現代瑞納的壓縮比 瀏覽:128
網吧里的ftp伺服器有什麼用 瀏覽:872
程序員年終總結工作體會 瀏覽:153
pdf可以直接列印 瀏覽:661
android刷wp8 瀏覽:912
歷史地圖集pdf 瀏覽:926
快手app極速版怎麼掃碼 瀏覽:805
qq程序員玩法 瀏覽:96
1是什麼門電路app 瀏覽:867
博之輪運動手錶用什麼app 瀏覽:646
asp視頻聊天源碼 瀏覽:85
網路游戲編程pdf 瀏覽:534
360壓縮出錯 瀏覽:848