Java使用Redis学习笔记

如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动。

Maven项目可以直接在pom.xml中加入jedis包驱动:

1<dependency> 2 <groupId>redis.clients</groupId> 3 <artifactId>jedis</artifactId> 4 <version>2.9.0</version> 5 </dependency>

Jedis中操作String,List,Set,Map,以及集合排序

1package com.ww.exercise; 2 3import java.util.HashMap; 4import java.util.Iterator; 5import java.util.List; 6import java.util.Map; 7import java.util.Set; 8 9import org.junit.Before; 10import org.junit.Test; 11 12import redis.clients.jedis.Jedis; 13 14/** 15 * 练习redis对接java 16 * @author 旺旺 17 */ 18public class RedisExercise { 19 20 private static Jedis jedis; 21 22 /*public static void setJedis() { 23 //连接到本地redis服务器 24 jedis = new Jedis("127.0.0.1",6379); 25 //验证用户密码 26 jedis.auth("zww"); 27 System.out.println("登入Redis数据库"); 28 }*/ 29 30 public static void main(String[] args) { 31 jedis = new Jedis("127.0.0.1",6379); 32 //验证用户密码 33 jedis.auth("zww"); 34 System.out.println("登入Redis数据库"); 35 exerciseString(); 36 exerciseHash(); 37 exerciseList(); 38 exerciseSet(); 39 exerciseSSet(); 40 } 41 42 /** 43 * 联系String类型的操作 44 */ 45 public static void exerciseString() { 46 //setJedis(); 47 //添加数据 48 jedis.set("name", "zww");//如果已存在,覆盖 49 System.out.println("新增." + jedis.get("name")); 50 51 //拼接数据 52 jedis.append("nane", " is my name"); 53 System.out.println("拼接." + jedis.get("name")); 54 55 //删除数据 56 jedis.del("name"); 57 System.out.println("删除." + jedis.get("name")); 58 59 //批量新增数据 60 jedis.mset("name","zww","age","20","email","www.ww.cn"); 61 jedis.decr("age");//Redis Decr 命令将 key 中储存的数字值减一。 62 //如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。 63 //如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 64 //本操作的值限制在 64 位(bit)有符号数字表示之内。 65 System.out.println("批量." + jedis.get("name")+ jedis.get("age")+ jedis.get("email")); 66 67 } 68 69 /** 70 * 联系Hash类型的操作 71 */ 72 @Test 73 public static void exerciseHash() { 74 //添加数据 75 Map<String, String> user = new HashMap<String, String>(); 76 user.put("name", "zww"); 77 user.put("age", "20"); 78 user.put("email", "www.ww"); 79 jedis.hmset("user", user); 80 //取出user中的name,结果是一个泛型的List<String> 81 //第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key是可变参数 82 List<String> users = jedis.hmget("user", "name","age","email"); 83 System.out.println("新增." + users); 84 85 //拼接数据 86 jedis.hset("user", "hobby", "guitar"); 87 System.out.println("拼接." + jedis.hmget("user", "name","age","email","hobby")); 88 89 //拿到hash中所有key,再通过迭代器得到值 90 Iterator<String> userKey = jedis.hkeys("user").iterator(); 91 while (userKey.hasNext()) { 92 String key = userKey.next(); 93 System.out.println(key + ":" + jedis.hget("user", key)); 94 } 95 96 //部分删除数据 97 jedis.hdel("user", "email"); 98 System.out.println("删除." + jedis.hmget("user", "name","age","email","hobby")); 99 100 System.out.println("age:" + jedis.hmget("user", "age")); //因为删除了,所以返回的是null 101 System.out.println("user的键中存放的值的个数:" + jedis.hlen("user")); //返回key为user的键中存放的值的个数 102 System.out.println("是否存在key为user的记录:" + jedis.exists("user"));//是否存在key为user的记录 返回true 103 System.out.println("user对象中的所有key:" + jedis.hkeys("user"));//返回user对象中的所有key 104 System.out.println("user对象中的所有value:" + jedis.hvals("user"));//返回map对象中的所有value 105 106 //删除整个hash 107 jedis.del("user"); 108 System.out.println("删除后是否存在key为user的记录:" + jedis.exists("user"));//是否存在key为user的记录 109 110 } 111 112 /** 113 * 联系List类型的操作 114 */ 115 @Test 116 public static void exerciseList() { 117 //添加数据 118 jedis.lpush("framework", "spring"); 119 jedis.lpush("framework", "spring");//可以相同? 120 jedis.lpush("framework", "mybatis"); 121 jedis.lpush("framework", "struts2"); 122 List<String> framework = jedis.lrange("framework", 0, -1);//结果是一个泛型的List<String> 123 System.out.println("新增." + framework); 124 125 //部分删除数据 126 String pop = jedis.lpop("framework");//移除最左边的数据 127 System.out.println("移除." + pop); 128 System.out.println("移除后." + jedis.lrange("framework", 0, -1)); 129 130 } 131 132 /** 133 * 联系Set类型的操作 134 */ 135 @Test 136 public static void exerciseSet() { 137 //添加数据 138 jedis.sadd("database", "redis"); 139 jedis.sadd("database", "oracle"); 140 jedis.sadd("database", "mysql"); 141 jedis.sadd("databas", "redis");//可以相同? 142 Set<String> database = jedis.smembers("database");//结果是一个泛型的Set<String> 143 System.out.println("新增."+database); 144 145 //删除 146 jedis.srem("database","oracle");//移除成员 147 System.out.println("user中的value:"+jedis.smembers("database"));//获取所有加入user的value 148 System.out.println("chx是否是user中的元素:"+jedis.sismember("database","redis"));//判断chx是否是user集合中的元素 149 System.out.println("集合中的一个随机元素:"+jedis.srandmember("database"));//返回集合中的一个随机元素 150 System.out.println("user中元素的个数:"+jedis.scard("database")); 151 152 //再来个 153 jedis.sadd("database1", "redis"); 154 jedis.sadd("database1", "db2"); 155 jedis.sadd("database1", "mysql"); 156 157 System.out.println("获取两个数据库的交集:"+jedis.sinter("database","database1")); 158 System.out.println("获取两个数据库的并集:"+jedis.sunion("database","database1")); 159 160 } 161 162 /** 163 * 联系SSet类型的操作 164 */ 165 @Test 166 public static void exerciseSSet() { 167 //添加数据 168 jedis.zadd("bat", 1,"baidu"); 169 jedis.zadd("bat", 2,"ali"); 170 jedis.zadd("bat", 3,"tengx"); 171 jedis.zadd("bat", 3,"zww");//覆盖 172 Set<String> database = jedis.zrange("bat", 0, -1);//结果是一个泛型的Set<String> 173 System.out.println("所有成员:"+database); 174 175 //删除成员 176 //jedis.zrem("bat", "zww"); 177 jedis.zremrangeByScore("bat", 3, 3);//通过序号删除指定成员 178 System.out.println("所有成员:"+database); 179 180 } 181 182 /** 183 * 联系 类型的操作 184 */ 185 @Test 186 public void exercise() { 187 188 } 189 190}

Redis连接池

1package com.ww.exercise; 2 3import redis.clients.jedis.Jedis; 4import redis.clients.jedis.JedisPool; 5import redis.clients.jedis.JedisPoolConfig; 6 7public final class RedisPool { 8 9 private static String ADDR = "127.0.0.1"; //服务器IP地址 10 private static int PORT = 6379; //服务器端口 11 private static String PASSW = "zww"; //redis服务器密码 12 13 //可用连接实例的最大数目,默认为8; 14 //如果赋值为-1,则表示不限制,如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽) 15 private static Integer MAX_TOTAL = 1024; 16 //控制一个pool最多有多少个状态为idle(空闲)的jedis实例,默认值是8 17 private static Integer MAX_IDLE = 200; 18 //等待可用连接的最大时间,单位是毫秒,默认值为-1,表示永不超时。 19 //如果超过等待时间,则直接抛出JedisConnectionException 20 private static Integer MAX_WAIT_MILLIS = 10000; 21 private static Integer TIMEOUT = 10000; 22 //在borrow(用)一个jedis实例时,是否提前进行validate(验证)操作; 23 //如果为true,则得到的jedis实例均是可用的 24 private static Boolean TEST_ON_BORROW = true; 25 private static JedisPool jedisPool = null; 26 27 /** 28 * 静态块,初始化Redis连接池 29 */ 30 static { 31 try { 32 JedisPoolConfig conf = new JedisPoolConfig(); 33 /*注意: 34 在高版本的jedis jar包,比如本版本2.9.0,JedisPoolConfig没有setMaxActive和setMaxWait属性了 35 这是因为高版本中官方废弃了此方法,用以下两个属性替换。 36 maxActive ==> maxTotal 37 maxWait==> maxWaitMillis 38 */ 39 conf.setMaxTotal(MAX_TOTAL); 40 conf.setMaxIdle(MAX_IDLE); 41 conf.setMaxWaitMillis(MAX_WAIT_MILLIS); 42 conf.setTestOnBorrow(TEST_ON_BORROW); 43 jedisPool = new JedisPool(conf,ADDR,PORT,TIMEOUT,PASSW); 44 45 } catch (Exception e) { 46 e.printStackTrace(); 47 } 48 } 49 50 /** 51 * 获取Jedis实例 52 * @return 53 */ 54 public synchronized static Jedis getRedis() { 55 try { 56 if(jedisPool != null) { 57 //从线程池获取 58 Jedis jedis = jedisPool.getResource(); 59 } else { 60 System.out.println("没有找到jedis池"); 61 return null; 62 } 63 } catch (Exception e) { 64 e.printStackTrace(); 65 return null; 66 } 67 return null; 68 } 69 70}

看代码,写代码。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )