導航:首頁 > 編程語言 > javaredis刪除

javaredis刪除

發布時間:2023-03-27 00:20:50

『壹』 關於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 中的程序會被編譯成中間語言位元組碼。它支持函數式,命令式以及面向對象編程。

『貳』 redis刪除一個key且這個key沒有value這樣java代碼會報錯嗎

不會啊,key裡面是空值不會有影響

『叄』 java 監聽redis map是否有修改

/**
* @param args
*/
public static void main(String[] args) {

//連接 redis 服務
Jedis jedis = new Jedis( "192.168.88.15" ,6379);

//密碼驗證-如果你沒有設置 redis 密碼可不驗證即可使用相關命令
// jedis.auth(" abcdefg ");

//簡單的key-value 存儲
jedis.set( "redis" , "myredis" );
System. out .println(jedis.get( "redis" ));

//在原有值得基礎上添加,如若之前沒有該key,則導入該key
//之前已經設定了 redis 對應" myredis ",此句執行便會使 redis 對應"myredisyourredis "
jedis.append( "redis" , "yourredis" );
jedis.append( "content" , "rabbit" );

// mset 是設置多個key-value值 參數(key1,value1,key2,value2,..., keyn , valuen)
// mget 是獲取多個key所對應的value值 參數(key1,key2,key3,..., keyn ) 返回的是個list
jedis.mset( "name1" , "yangw" , "name2" , "demon" , "name3" , "elena" );
System. out .println(jedis.mget( "name1" , "name2" , "name3" ));

//map
Map<String,String> user = new HashMap<String,String>();
user.put( "name" , "cd" );
user.put( "password" , "123456" );
//map存入 redis
jedis.hmset( "user" , user);
// mapkey 個數
System. out .println(String. format ( "len:%d" , jedis.hlen( "user" )));
//map中的所有鍵值
System. out .println(String. format ( "keys: %s" , jedis.hkeys( "user" ) ));
//map中的所有value
System. out .println(String. format ( "values: %s" , jedis.hvals( "user" ) ));
//取出map中的name欄位值
List<String> rsmap = jedis.hmget( "user" , "name" , "password" );
System. out .println(rsmap);
//刪除map中的某一個鍵值 password
jedis.hdel( "user" , "password" );
System. out .println(jedis.hmget( "user" , "name" , "password" ));

//list
jedis.del( "listDemo" );
System. out .println(jedis.lrange( "listDemo" , 0, -1));
jedis.lpush( "listDemo" , "A" );
jedis.lpush( "listDemo" , "B" );
jedis.lpush( "listDemo" , "C" );
System. out .println(jedis.lrange( "listDemo" , 0, -1));
System. out .println(jedis.lrange( "listDemo" , 0, 1));

//set
jedis.sadd( "sname" , "wobby" );
jedis.sadd( "sname" , "kings" );
jedis.sadd( "sname" , "demon" );
System. out .println(String. format ( "set num: %d" , jedis.scard( "sname" )));
System. out .println(String. format ( "all members: %s" , jedis.smembers( "sname")));
System. out .println(String. format ( "is member: %B" , jedis.sismember( "sname" , "wobby" )));
System. out .println(String. format ( "rand member: %s" , jedis.srandmember("sname" )));
//刪除一個對象
jedis.srem( "sname" , "demon" );
System. out .println(String. format ( "all members: %s" , jedis.smembers( "sname")));
}
二、將自定義對象保存到redis中:
1、自定義pojo 實現Serializable 介面:
package cn.mingyuan.redis;
import java.io.Serializable;
/**
* 測試用 pojo ,實現了 Serializable ,以便進行系列化操作
*
* @author mingyuan
*
*/
public class Person implements Serializable {
private static final long serialVersionUID = -3562550857760039655L;

private String name ;
private int age ;
public Person(){}
public Person(String name, int age) {
super ();
this . name = name;
this . age = age;
}
public String getName() {
return name ;
}
public void setName(String name) {
this . name = name;
}
public int getAge() {
return age ;
}
public void setAge( int age) {
this . age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]" ;
}
}
2、測試類:
package cn.mingyuan.redis;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import redis.clients.jedis.Jedis;
public class Test {
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws IOException,
ClassNotFoundException {
// Jedis redis = new Jedis ("192.168.88.15");
Jedis redis = new Jedis( "192.168.88.15" , 6379);
// connect可以不要,因為在執行set操作的時候會先進行判斷客戶端是否於伺服器端建立了連接,若無,則啟動連接過程
redis.connect();
String set = redis.set( "mingyuan" , "1" );
System. out .println( " set result \t" + set);
redis.incr( "mingyuan" );
String string = redis.get( "mingyuan" );
System. out .println( " get result of key 'mingyuan' \t" + string);
// 下面是對對象進行存儲的測試代碼
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);

Person person = new Person( "liudehua" ,22);
oos.writeObject(person);
byte [] byteArray = bos.toByteArray();
oos.close();
bos.close();
String setObjectRet = redis.set( "mingyuan" .getBytes(), byteArray);
System. out .println( " set object return \t" + setObjectRet);
byte [] bs = redis.get( "mingyuan" .getBytes());
ByteArrayInputStream bis = new ByteArrayInputStream(bs);
ObjectInputStream inputStream = new ObjectInputStream(bis);
Person readObject = (Person) inputStream.readObject();
System. out .println( " read object \t" + readObject.toString());
inputStream.close();
bis.close();
redis.disconnect();
}
}

『肆』 java 多線程讀取隊列部分元素,讀出後將讀出的元素存放進redis並且刪除原來隊列的元素

多線程去讀同一個隊列里的東西有意義么,要知道多線程的話是在同時去工作,你還要刪除原來的元素,想要不沖突只能鎖定了這個隊列去操作,那這樣多線程的意義就沒有了,除非你森局在每個線程中此老讓都設定他去讀取這個隊列的某一部分,否則沒有含唯什麼意義

『伍』 java redis刪除刪除不了數據 求解

你這培豎個刪除用法不對,delete(redisKey,"map中的每個key")
cardMap.toString(),獲取到的絕對不是【map中的每個key】,所以配握大皮檔你這里刻個debug,看看你cardMap.toString()具體是什麼數據

『陸』 java操作redis有哪些方法

電腦安裝Redis,然後通過悄肆JRedis(jar包)下的JRedis redis = new JRedis(address,port);就可以操作了,比連接資料庫還簡單,如果是windows的話 建議裝虛擬皮中機用linux安裝redis,其啟握轎他的只要你懂redis,用java操作redis太簡單了

『柒』 java代碼怎麼正則刪除redis的數據

java代碼怎麼正則刪除redis的數據,即批量刪除符合一定條件的redis數據,現在介紹批量刪除已某些字元開頭的redis數據:

在Java中連接Redis,並進行操作,首先得載入以JAR包形式存在的Java中的Redis Client,我們這里選擇Jedis。以下是使用Jedis的具體步驟:

  1. 在Maven項目中,在pom.xml中增加如下語句(即載入Jedis jar包):

    <dependency>

    悉液 <groupId>redis.clients</groupId>

    <artifactId>jedis</artifactId>

    <version>2.7.2</version>

    <type>jar</type>

    </dependency>

    如不是Maven工程,就自行下載Jedis jar包引用即可。

  2. 在載入Jedis JAR包之後,可以直接使用新建一個Jedis實例的方法,來建立一個到Redis的連接,並進行操作。不過跟Mysql一樣,每次操作的時候,都建立連接,很耗費性能。解決方法就是從一個連接池中取出連接對象,用完還回去。使用連接池的方案還能解決很多同步性問題。

    在皮轎Jedis中,管理Redis連接的類是JedisPool

    package com.atzy


    importredis.clients.jedis.Jedis;

    importredis.clients.jedis.JedisPool;

    publicclassRedisHelper{

    publicstaticvoidmain(String[]args){

    JedisPooljedisPool=newJedisPool("localhost",6379);

    Jedisjedis=null;

    try{

    jedis=jedisPool.getResource();

    Stringpre_str="ab";

    Set<String>set=jedis.keys(pre_str+"*");

    Iterator<String>it=set.iterator();

    while(it.hasNext()){

    StringkeyStr=it.next();

    System.out.println(keyStr);

    jedis.del(keyStr);

    }

    }catch(Exceptione){

    e.printStackTrace();

    }finally{

    燃陸肆if(jedis!=null)

    jedis.close();

    }

    jedisPool.destroy();

    }

    }

以上代碼則是批量刪除以某字元串前綴的key 。

『捌』 java設置 redis 失效時間多久

EXPIRE命令返回1表示成功,返回0表示鍵值不存在或設置失敗。
同時這里還有一個比較常用的命令是ttl,用於查看一個鍵還有多久時間會被刪除。返回的是剩餘時間(秒數)。
這里就不貼代碼了,有一點需要說明的是,ttl命令在鍵不存在或被刪除之後,會返回-2,在沒有為鍵設置生存時間(即永久存在,建一個鍵之後的默認情況)時返回的是-1。大家可以親自操作一把。
如果想要把一個設置過過期時間的鍵取消過期時間設置,則需要使用persist命令。
redis > SET session:27e7a id1234
OK
redis > EXPIRE session:27e7a 1200
(integer) 1
redis > TTL session:27e7a
(integer) 1092
redis > PERSIST session:27e7a
(integer) 1
redis > TTL session:27e7a
(integer) -1

這里需要說明一點的是,除了使用persist命令外,使用set、getset命令為鍵賦值,也會同時消除鍵的生存時間,如果需要可以重新使用expire命令為鍵設置生存時間。而其他對鍵的操作命令(如incr、lpush、hset、zrem)都不會影響鍵的生存時間。
expire命令的單位是秒,而且這個參數必須為整數,如果需要更精準的時間的話,需要使用pexpire命令設置,其單位為毫秒,同理也需要用pttl命令來看鍵的剩餘毫秒數。當然使用expire命令設置的過期時間也是可以用pttl看鍵的剩餘毫秒數的。
訪問限制
有時候我們會有一個需求是需要限制一個用戶對一個資源的訪問頻率,我們假定一個用戶(用IP作為判斷)每分鍾對一個資源訪問次數不能超過10次。
我們可以使用一個鍵,每次用戶訪問則把值加1,當值加到10的時候,我們設定鍵的過期時間為60秒,並且禁止訪問。這時候下次訪問發現值為10,則不讓訪問了,然後60秒後鍵被刪除,這時候再次創建鍵。這樣就可以解決,但是其實這樣時間並不精準,問題還是挺大的。
我們還有一個方案:使用隊列。前面的章節也說到了,使用列表類型可以用作隊列。
我們設定一個隊列rate.limiting.192.168.1.1(假定是這個IP),我們把每次的訪問時間都添加到隊列中,當隊列長度達到10以後,判斷當前時間與隊列第一個值的時間差是否小於60,如果小於60則說明60秒內訪問次數超過10次,不允許訪問;否則說明可以訪問,則把隊列頭的值刪除,隊列尾增加當前訪問時間。
這種方法可以比較精準的實現訪問限制,但是當限制的次數比較大時,這種方法佔用的存儲空間也會比較大。
緩存
有時候會把一些對CPU或IO資源消耗比較大的操作結果緩存起來,並設置一定時間的自動過期。比如我們設定一個微博外鏈的最熱站點緩存放於新浪微博的首頁,這樣我們不可能每次訪問都重新計算最熱的外鏈站點,所以我們可以設定兩小時更新一次。每次訪問是判斷這個鍵有沒有,如果存在則直接返回,如果沒有則通過計算把內容存入鍵中,並設定兩小時的過期時間。
然而在很多場合這種方法會很恐怖,當伺服器內存有限的時候,大量使用緩存切設置生存時間過長就會導致redis佔用太多內存,而redis有時候會把系統內存都吃掉,導致系統崩潰。但是設置時間過短又會導致緩存的命中太低。
所以我們最好的辦法是設定緩存的淘汰規則。這種方式比較適用於將redis用作緩存系統的時候比較好。
具體就是:修改配置文件中的maxmemory參數,限制redis的最大內存,當超出後會按照maxmemory-policy參數指定的策略刪除不需要的鍵,直到redis佔用的內存小於設定值。

『玖』 請問java代碼編寫客戶端,實現退出操作時,需要刪除redis中緩存的用戶數據嗎為什麼

沒什麼特殊可以不刪,redis自己有過期策略:定期清理和惰性清理,還沒清理的還有內存淘汰機制

閱讀全文

與javaredis刪除相關的資料

熱點內容
黑色豪門之純情老婆全本免費 瀏覽:290
最美人物微電影名字 瀏覽:62
德國愛情電影推薦 瀏覽:859
好看的,每天更新的網址推薦 瀏覽:910
五行拳電影 瀏覽:788
wolfram編程 瀏覽:140
蜘蛛有哪幾種類動畫片? 瀏覽:852
韓劇這個男的和三姐妹都有關系 瀏覽:847
電影中的大奶的視頻 瀏覽:178
日本電影一個女的乳頭被切掉了 瀏覽:268
看電影男朋友聽我心跳 瀏覽:494
cudac語言編程指南 瀏覽:856
小說女主被男主囚禁各種逃跑 瀏覽:722
重生在黃埔一期參加北伐的小說 瀏覽:88
韓國床戲電影合集 瀏覽:199
好看的快穿肉文 瀏覽:512
曼曼雅朵小仙兒有聲小說 瀏覽:298
sci謎案集未刪改資源 瀏覽:94
編譯的字體顏色怎麼調 瀏覽:118