㈠ redis 能不能給列表或者合集里邊的元素設置到期時間
用ip當做key取值如果不存在,點擊量加1,並且設置一個值,有效期半小時如果存在,忽略不處理!
㈡ redis 有序集合可以設置過期時間嗎
可以用sorted set,把要過期的member和key的信息放在sorted set的member里,把過期時間放在score中。
㈢ redis怎麼存放一個list
如果需要用到Redis存儲List對象,而list又不需要進行操作,可以按照MC的方式進行存儲,不過Jedis之類的客戶端沒有提供API,可以有兩種思路實現:
1. 分別序列化 elements ,然後 set 存儲
2. 序列化List對象,set存儲
這兩種方法都類似MC的 Object方法存儲,運用這種方式意味著放棄Redis對List提供的操作方法。
import net.spy.memcached.compat.CloseUtil;
import net.spy.memcached.compat.log.Logger;
import net.spy.memcached.compat.log.LoggerFactory;
import redis.clients.jedis.Client;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Created by IntelliJ IDEA.
* User: lifeng.xu
* Date: 12-6-11
* Time: 上午11:10
* To change this template use File | Settings | File Templates.
*/
public class JedisTest {
private static Logger logger = LoggerFactory.getLogger(JedisTest.class);
/**
* Jedis Pool for Jedis Resource
* @return
*/
public static JedisPool buildJedisPool(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(1);
config.setMinIdle(50);
config.setMaxIdle(3000);
config.setMaxWait(5000);
JedisPool jedisPool = new JedisPool(config,
"*****", ****);
return jedisPool;
}
/**
* Test Data
* @return
*/
public static List<User> buildTestData(){
User a = new User();
a.setName("a");
User b = new User();
b.setName("b");
List<User> list = new ArrayList<User>();
list.add(a);
list.add(b);
return list;
}
/**
* Test for
*/
public static void testSetElements(){
List<User> testData = buildTestData();
Jedis jedis = buildJedisPool().getResource();
String key = "testSetElements" + new Random(1000).nextInt();
jedis.set(key.getBytes(), ObjectsTranscoder.serialize(testData));
//驗證
byte[] in = jedis.get(key.getBytes());
List<User> list = ObjectsTranscoder.deserialize(in);
for(User user : list){
System.out.println("testSetElements user name is:" + user.getName());
}
}
public static void testSetEnsemble(){
List<User> testData = buildTestData();
Jedis jedis = buildJedisPool().getResource();
String key = "testSetEnsemble" + new Random(1000).nextInt();
jedis.set(key.getBytes(), ListTranscoder.serialize(testData));
//驗證
byte[] in = jedis.get(key.getBytes());
List<User> list = (List<User>)ListTranscoder.deserialize(in);
for(User user : list){
System.out.println("testSetEnsemble user name is:" + user.getName());
}
}
public static void main(String[] args) {
testSetElements();
testSetEnsemble();
}
public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (Exception e) {
logger.info("Unable to close %s", closeable, e);
}
}
}
static class User implements Serializable{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
static class ObjectsTranscoder{
public static byte[] serialize(List<User> value) {
if (value == null) {
throw new NullPointerException("Can't serialize null");
}
byte[] rv=null;
ByteArrayOutputStream bos = null;
ObjectOutputStream os = null;
try {
bos = new ByteArrayOutputStream();
os = new ObjectOutputStream(bos);
for(User user : value){
os.writeObject(user);
}
os.writeObject(null);
os.close();
bos.close();
rv = bos.toByteArray();
} catch (IOException e) {
throw new IllegalArgumentException("Non-serializable object", e);
} finally {
close(os);
close(bos);
}
return rv;
}
public static List<User> deserialize(byte[] in) {
List<User> list = new ArrayList<User>();
ByteArrayInputStream bis = null;
ObjectInputStream is = null;
try {
if(in != null) {
bis=new ByteArrayInputStream(in);
is=new ObjectInputStream(bis);
while (true) {
User user = (User) is.readObject();
if(user == null){
break;
}else{
list.add(user);
}
}
is.close();
bis.close();
}
} catch (IOException e) {
logger.warn("Caught IOException decoding %d bytes of data",
in == null ? 0 : in.length, e);
} catch (ClassNotFoundException e) {
logger.warn("Caught CNFE decoding %d bytes of data",
in == null ? 0 : in.length, e);
} finally {
CloseUtil.close(is);
CloseUtil.close(bis);
}
return list;
}
}
static class ListTranscoder{
public static byte[] serialize(Object value) {
if (value == null) {
throw new NullPointerException("Can't serialize null");
}
byte[] rv=null;
ByteArrayOutputStream bos = null;
ObjectOutputStream os = null;
try {
bos = new ByteArrayOutputStream();
os = new ObjectOutputStream(bos);
os.writeObject(value);
os.close();
bos.close();
rv = bos.toByteArray();
} catch (IOException e) {
throw new IllegalArgumentException("Non-serializable object", e);
} finally {
close(os);
close(bos);
}
return rv;
}
public static Object deserialize(byte[] in) {
Object rv=null;
ByteArrayInputStream bis = null;
ObjectInputStream is = null;
try {
if(in != null) {
bis=new ByteArrayInputStream(in);
is=new ObjectInputStream(bis);
rv=is.readObject();
is.close();
bis.close();
}
} catch (IOException e) {
logger.warn("Caught IOException decoding %d bytes of data",
in == null ? 0 : in.length, e);
} catch (ClassNotFoundException e) {
logger.warn("Caught CNFE decoding %d bytes of data",
in == null ? 0 : in.length, e);
} finally {
CloseUtil.close(is);
CloseUtil.close(bis);
}
return rv;
}
}
}
㈣ jedis里怎麼設置數據的有效期
1、下載redis安裝包,解壓後進入redis目錄,執行命令redis-server.exe redis.windows.conf,redis解壓後目錄如圖。回
㈤ 怎麼查看redis數據的過期時間
通過EXPIRE 命令或者PEXPIRE 命令,客戶端可以以秒或者毫秒精度為資料庫中的某個鍵設置生存時間( Time To Live , TTL) ,在經過指定的秒數或者毫秒數之後,伺服器就會自動刪除生存時間為0的鍵:
redis> SET key value
OK
redis> EXP 工RE key 5
(integer) 1
redis> GET key // 5 秒之內
"value"
redis> GET key // 5 秒之後
(nil)
㈥ PHP操作redis如何設置有效期
自己寫方法對比呀 寫入的時候加時間戳,然後定時幹掉超時的
㈦ redis 設置值得有效時間有無限嗎
如果內容都是重要來的,那隻能選擇擴展源內存,內存不夠怎麼辦1、在redis的使用過程中,比如在業務運行的情況下,有時候需要急需修改redis的配置,這時要麼趕緊刪除無用的內存,要麼擴展內存。
2、如果有無用的內容可刪除那麼所有問題都已經解決。
3
㈧ 往redis存數據的時候不設置過期時間 是不是這條數據就永久
不會過期。 但是這樣說有點絕對。一般情況是這樣,當你配置中開啟了超專出最大內存限屬制就寫磁碟的話,那麼這些沒有設置過期時間的key可能會被寫到磁碟上。 假如沒設置。那麼REDIS將使用LRU機制,將內存中的老數據刪除,並寫入新數據。
可以用sorted set,把要過期的member和key的信息放在sorted set的member里,把過期時間放在score中。跑個任務用zrangebyscore遍歷就行了。用sorted set好處是只需要遍歷過期的member,不用掃描整個過期member集合。
㈨ redis怎麼存儲list對象
方案一:直接使用List結構,List裡面存儲二進制的任務Bean信息,這樣做查詢全部任務很方便,查詢單條任務速度較慢,並且刪除和修改狀態很麻煩;方案二:直接使用Hash結構,Hash的key存儲任務ID,value存儲二進制的Bean信息,這樣做查詢所有任務、查詢單條任務以及刪除任務都很快,但是修改狀態也必須先取出數據再修改再插入!