导航:首页 > 编程语言 > 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删除相关的资料

热点内容
英文剧,7个孩子 浏览:245
哈利波特电影名英文名 浏览:50
可以看污的软件下载 浏览:18
好看网站推荐 浏览:860
iphone文件夹设封面 浏览:249
日本电影盔甲僵尸 浏览:614
手机怎么创建minecraft服务器 浏览:487
LCD在python中 浏览:980
小电影的网站谁知道 浏览:67
香港男女出轨开房遇见的电影名字 浏览:373
单片机stm使用说明书 浏览:641
手机百度android开发 浏览:957
男主怀孕生子女尊 浏览:297
邵氏3级电影 浏览:321
男主角叫安迪的电影 浏览:78
建德盛德电影院今日电影 浏览:90
谁有在线观看的网站 浏览:644
午夜不卡电影 浏览:761
python字符串unicode编码 浏览:7