java代码怎么正则删除redis的数据,即批量删除符合一定条件的redis数据,现在介绍批量删除已某些字符开头的redis数据:
创新互联公司-专业网站定制、快速模板网站建设、高性价比榆树网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式榆树网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖榆树地区。费用合理售后完善,10年实体公司更值得信赖。
在Java中连接Redis,并进行操作,首先得加载以JAR包形式存在的Java中的Redis Client,我们这里选择Jedis。以下是使用Jedis的具体步骤:
在Maven项目中,在pom.xml中增加如下语句(即加载Jedis jar包):
dependency
groupIdredis.clients/groupId
artifactIdjedis/artifactId
version2.7.2/version
typejar/type
/dependency
如不是Maven工程,就自行下载Jedis jar包引用即可。
在加载Jedis JAR包之后,可以直接使用新建一个Jedis实例的方法,来建立一个到Redis的连接,并进行操作。不过跟Mysql一样,每次操作的时候,都建立连接,很耗费性能。解决方法就是从一个连接池中取出连接对象,用完还回去。使用连接池的方案还能解决很多同步性问题。
在Jedis中,管理Redis连接的类是JedisPool
package com.atzy
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class RedisHelper {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("localhost", 6379);
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String pre_str="ab";
SetString set = jedis.keys(pre_str +"*");
IteratorString it = set.iterator();
while(it.hasNext()){
String keyStr = it.next();
System.out.println(keyStr);
jedis.del(keyStr);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null)
jedis.close();
}
jedisPool.destroy();
}
}
以上代码则是批量删除以某字符串前缀的key 。
从你给的代码中可以看出,五次循环中,new出的对象都是赋值给了mod这个变量,结束循环,mod的值就是最后一次new出的对象,你通过mod自然只能删除最后一个new出的对象,不管你调用mod.remove()多少次。
想要全部删除,这就要看你是否有对「5次循环中前4次生成的那些对象」的引用,比如放在了一个数组或者容器中,如果有,就可以遍历数组或者容器来删除,否则你无法删除,因为你都没有对它们的引用。
如果还需帮助,你可以把全部的代码粘贴出来看看~
/*
怎么用java同时实现批量删除,批量修改?
*/
//1,可以利用循环批量来操作数组元素
int arr[] = new int[100];//定义一个数组,长度为100
//对该数组进行批量赋值
for (int i = 0; i arr.length; i++) {
arr[i] = i;
}
//2,对于集合,可以使用removeALL方法进行批量删除
ListString list = new ArrayListString();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.removeAll(list);
System.out.println(list);
//这上是java自带的一些方法
//3,JDBC
/**
* 对于数据库的操作,就需要用SQL语言来批量处理了;
* 比如:select *from EMP;
*
* 利用JDBC的一些方法,比如预处理命令,可以对数据库进行批量操作,
*/
我会将在编写过程中出现的一些小知识点也进行总结概括的。
此项目基于的框架是:springmvc+mybatis
(1)controller
/**
* 批量删除 batch
*/
@RequestMapping("/batchDeletes")
@ResponseBody
public void batchDeletes(HttpServletRequest request,HttpServletResponse response){
String items = request.getParameter("delitems");
ListString delList = new ArrayListString();
String[] strs = items.split(",");
for (String str : strs) {
delList.add(str);
}
userService.batchDeletes(delList);
}
代码思路:
从前台勾选的选择框中传过来的值用“,”分开,然后遍历存放到delList集合里面,直接删delList集合里面的所有字符串。
(2)service
/**
* 批量删除
*/
void batchDeletes(List delList);
(3)impl
/**
* 批量删除
*/
@Override
public void batchDeletes(List delList) {
userMapper.batchDeletes(delList);
}
(4)mapper
/**
* 批量删除
*/
void batchDeletes(List delList);
(5)mapper.xml
!--批量删除 --
delete id="batchDeletes" parameterType="java.util.List"
DELETE FROM tp_user where uname in
foreach collection="list" index="index" item="item" open="(" separator="," close=")"
#{item}
/foreach
/delete
如上的mybatis指代的意思如下:
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名. (直接找到对应的delList集合里面的所有元素,item="item"中的item(后一个)必须与#{item} 中的item一致)
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.
open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.
close表示以什么结束.
前台代码:
user_list.jsp
//全选
function selectAll(){
if ($("#SelectAll").is(":checked")) {
$(":checkbox").prop("checked", true);//所有选择框都选中
} else {
$(":checkbox").prop("checked", false);
}
}
//批量删除
function batchDeletes(){
//判断至少写了一项
var checkedNum = $("input[name='subcheck']:checked").length;
if(checkedNum==0){
alert("请至少选择一项!");
return false;
}
if(confirm("确定删除所选项目?")){
var checkedList = new Array();
$("input[name='subcheck']:checked").each(function(){
checkedList.push($(this).val());
});
$.ajax({
type:"POST",
url:"web/user/batchDeletes.action",
data:{"delitems":checkedList.toString()},
datatype:"html",
success:function(data){
$("[name='checkbox2']:checkbox").attr("checked",false);
art.dialog.tips('删除成功!');
setTimeout("location.reload()",1000);//页面刷新
},
error:function(data){
art.dialog.tips('删除失败!');
}
});
}
}
table class="tb_list"
tr
td align="center"input type="checkbox" id="SelectAll"
onclick="selectAll();" / 全选/td
th序号/th
/tr
c:forEach items="${page.list }" var="items" varStatus="idx"
tr class="row_${idx.count%2+1}"
td style="display:none"${batch.id}/td
td align="center"input type="checkbox" id="subcheck"
name="subcheck" value="${items.UNAME }" /
/td
td${page.onePageCount*(page.currentPage-1)+idx.count }/td
tr
/table
备注:此代码我传值的主键是用uname来删除的,实际应该用id作为主键,因为id的unique
,uname若重名,则就会出现bug,相信大家都明白,就不再过多解释了。
public boolean delUser(int[] id) {
boolean flag = false;
String sql = "delete from userInfo where userId=?";
conn = base.getConnection();
PreparedStatement pst = null;
try {
pst = conn.prepareStatement(sql);
for (int i = 0; i id.length; i++) {
pst.setInt(1, id[i]);
// 使用批处理
pst.addBatch();
}
// 执行批处理
int[] result = pst.executeBatch();
if (result[0] 0) {
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
base.free(conn, pst, null);
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}
只能这样来进行批量删除 好好的看一下
直接 delete from xxx where id in (a,b,c...)
楼上说的循环可以实现,但是最好不要把DML操作写在循环里面 会影响效率。最好是跟数据库一次交互 直接完成。