redis学习(三)之Jedis操作CRUD
作者:互联网
使用Jedis进行测试
1.创建Maven项目
2.添加pom.xml文件
<properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> </dependencies>
3.创建一个包com.lianxi.Jedis文件夹和创建一个JedisDemo01的java类
4.测试连接rerdis
/** * 连接Redis */ @Test public void initCount() { // 创建Jedis对象,连接Redis服务器 Jedis jedis = new Jedis("127.0.0.1", 6379); // 设置认证密码 // jedis.auth("root"); // 指定数据库 jedis.select(0); // 使用ping命令,测试是否连接成功 String result = jedis.ping(); System.out.println(result); }
Jeids API的操作
/** * Jeids API的操作 * @author pan_junbiao */ @Test public void jedisAPITest() { //创建Jedis实例,连接本地Redis服务 Jedis jedis = new Jedis("127.0.0.1", 6379); //设置Redis数据库的密码 System.out.println(jedis.auth("123456")); //获取客户端信息 System.out.println(jedis.getClient()); //清空Redis数据库,相当于执行FLUSHALL命令 System.out.println(jedis.flushAll()); //查看Redis信息,相当于执行INFO命令 System.out.println(jedis.info()); //获取数据库中key的数量,相当于指定DBSIZE命令 System.out.println(jedis.dbSize()); //获取数据库名字 System.out.println(jedis.getDB()); //返回当前Redis服务器的时间,相当于执行TIME命令 System.out.println(jedis.time()); }
Jedis-Api: key
jedis.set("k1", "v1"); jedis.set("k2", "v2"); jedis.set("k3", "v3"); Set<String> keys = jedis.keys("*"); System.out.println(keys.size()); for (String key : keys) { System.out.println(key); } System.out.println(jedis.exists("k1")); System.out.println(jedis.ttl("k1")); System.out.println(jedis.get("k1"));
Jedis-API:String
jedis.mset("str1","v1","str2","v2","str3","v3"); System.out.println(jedis.mget("str1","str2","str3"));
Jedis-API:list
List<String> list = jedis.lrange("mylist",0,-1); for (String element : list) { System.out.println(element); }
Jedis-API:set
jedis.sadd("orders", "order01"); jedis.sadd("orders", "order02"); jedis.sadd("orders", "order03"); jedis.sadd("orders", "order04"); Set<String> smembers = jedis.smembers("orders"); for (String order : smembers) { System.out.println(order); } jedis.srem("orders", "order02");
Jedis-API:hash
jedis.hset("hash1","userName","lisi"); System.out.println(jedis.hget("hash1","userName")); Map<String,String> map = new HashMap<String,String>(); map.put("telphone","13810169999"); map.put("address","atguigu"); map.put("email","abc@163.com"); jedis.hmset("hash2",map); List<String> result = jedis.hmget("hash2", "telphone","email"); for (String element : result) { System.out.println(element); }
Jedis-API:zset
jedis.zadd("zset01", 100d, "z3"); jedis.zadd("zset01", 90d, "l4"); jedis.zadd("zset01", 80d, "w5"); jedis.zadd("zset01", 70d, "z6"); Set<String> zrange = jedis.zrange("zset01", 0, -1); for (String e : zrange) { System.out.println(e); }
示例1:
import org.junit.jupiter.api.Test; import redis.clients.jedis.Jedis; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; public class JedisDemo01 { public static void main(String[] args) { //创建Jedis对象 Jedis jedis = new Jedis("127.0.0.1", 6379); //测试 String ping = jedis.ping(); System.out.println(ping); } @Test void KeyString(){ //创建Jedis对象 Jedis jedis = new Jedis("127.0.0.1", 6379); //添加 jedis.set("name","qianling"); //获取 String name = jedis.get("name"); System.out.println(name); //设置多个key-value jedis.mset("k1","v1","k2","v2"); List<String> mget = jedis.mget("k1", "k2"); System.out.println(mget); Set<String> keys = jedis.keys("*"); for (String key : keys) { System.out.println(key); } } //操作list @Test void List(){ //创建Jedis对象 Jedis jedis = new Jedis("127.0.0.1", 6379); List<String> list = jedis.lrange("mylist",0,-1); for (String element : list) { System.out.println(element); } } //操作set @Test void set(){ //创建Jedis对象 Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.sadd("orders", "order01"); jedis.sadd("orders", "order02"); jedis.sadd("orders", "order03"); jedis.sadd("orders", "order04"); Set<String> smembers = jedis.smembers("orders"); for (String order : smembers) { System.out.println(order); } jedis.srem("orders", "order02"); } //操作hash @Test void hash(){ //创建Jedis对象 Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.hset("hash1","userName","lisi"); System.out.println(jedis.hget("hash1","userName")); Map<String,String> map = new HashMap<String,String>(); map.put("telphone","13810169999"); map.put("address","atguigu"); map.put("email","abc@163.com"); jedis.hmset("hash2",map); List<String> result = jedis.hmget("hash2", "telphone","email"); for (String element : result) { System.out.println(element); } } //操作zset @Test void zset(){ //创建Jedis对象 Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.zadd("zset01", 100d, "z3"); jedis.zadd("zset01", 90d, "l4"); jedis.zadd("zset01", 80d, "w5"); jedis.zadd("zset01", 70d, "z6"); Set<String> zrange = jedis.zrange("zset01", 0, -1); for (String e : zrange) { System.out.println(e); } } }
示例2:
key+String
/** * 获取Reids连接 * @author pan_junbiao */ public Jedis getJedis() { //连接Redis服务器 Jedis jedis = new Jedis("127.0.0.1", 6379); System.out.println("Redis服务器连接成功!"); return jedis; } /** * Reids的Key类型 * @author pan_junbiao */ @Test public void redisKey() { Jedis jedis = getJedis(); jedis.set("myKey", "pan_junbiao的博客"); System.out.println("判断键为myKey的值是否存在:" + jedis.exists("myKey")); System.out.println("获取键为myKey的值:" + jedis.get("myKey")); System.out.println("查看键为myKey的类型:" + jedis.type("myKey")); System.out.println("随机获取一个Key:" + jedis.randomKey()); System.out.println("将键myKey重命名为myKey1:" + jedis.rename("myKey", "myKey1")); System.out.println("删除键为myKey1:" + jedis.del("myKey1")); } /** * Reids的String类型 * @author pan_junbiao */ @Test public void redisString() { Jedis jedis = getJedis(); System.out.println("设置userName:" + jedis.set("userName", "pan_junbiao的博客")); System.out.println("设置blogUrl:" + jedis.set("blogUrl", "https://blog.csdn.net/pan_junbiao")); System.out.println("设置blogRemark:" + jedis.set("blogRemark", "您好,欢迎访问 pan_junbiao的博客")); System.out.println("用户名称:" + jedis.get("userName")); System.out.println("博客地址:" + jedis.get("blogUrl")); System.out.println("博客信息:" + jedis.get("blogRemark")); System.out.println("设置userName,如果存在返回0:" + jedis.setnx("userName", "pan_junbiao的博客")); System.out.println("设置userName2:" + jedis.set("userName2", "pan_junbiao")); System.out.println("获取key为userName和userName2的值:"+jedis.mget("userName","userName2")); System.out.println("自增1:" + jedis.incr("index")); System.out.println("自增1:" + jedis.incr("index")); System.out.println("自增2:" + jedis.incrBy("count",2)); System.out.println("自增2:" + jedis.incrBy("count",2)); System.out.println("递减1:" + jedis.decr("count")); System.out.println("递减2:" + jedis.decrBy("count",2)); System.out.println("在userName2后面添加String:" + jedis.append("userName2","的博客")); System.out.println("获取key为userName2的值:" + jedis.get("userName2")); }
list
/** * Reids的List类型 * @author pan_junbiao */ @Test public void redisList() { Jedis jedis = getJedis(); //在列表的尾部添加数据 jedis.rpush("userList", "pan_junbiao的博客", "https://blog.csdn.net/pan_junbiao", "pan_junbiao的博客", "深圳市"); //返回列表长度 System.out.println("列表长度:" + jedis.llen("userList")); //移除一个元素 System.out.println("移除一个元素:" + jedis.lrem("userList", 1, "深圳市")); //修改值 System.out.println("修改元素值:" + jedis.lset("userList", 2, "您好,欢迎访问 pan_junbiao的博客")); //取值 List<String> list = jedis.lrange("userList", 0, -1); for (String str : list) { System.out.println(str); } //删除列表 System.out.println("删除列表:" + jedis.del("userList")); }
set
/** * Reids的Set类型 * @author pan_junbiao */ @Test public void redisSet() { Jedis jedis = getJedis(); jedis.sadd("city", "北京", "上海", "广州", "深圳", "昆明", "武汉", "大理"); System.out.println("移除并返回集合中的一个随机元素:" + jedis.spop("city")); System.out.println("随机取出一个值:" + jedis.srandmember("city")); //移除集合中的一个或多个成员元素 System.out.println("移除集合元素:" + jedis.srem("city", "北京")); //返回集合中所有元素 System.out.println(jedis.smembers("city")); //判断元素是否存在 System.out.println("判断深圳是否存在集合中:" + jedis.sismember("city","深圳")); //返回集合中元素的数量 System.out.println("集合中元素的数量:" + jedis.scard("city")); jedis.sadd("city2","昆明","香港","澳门","台湾","上海","北京","成都"); System.out.println("交集:" + jedis.sinter("city","city2")); System.out.println("并集:" + jedis.sunion("city","city2")); System.out.println("差集:" + jedis.sdiff("city","city2")); }
zset
/** * Reids的有序集合(Sorted Set)类型 * @author pan_junbiao */ @Test public void redisSortedSet() { Jedis jedis = getJedis(); jedis.zadd("math-score", 100, "pan_junbiao的博客_01"); jedis.zadd("math-score", 82, "pan_junbiao的博客_02"); jedis.zadd("math-score", 80, "pan_junbiao的博客_03"); jedis.zadd("math-score", 55, "pan_junbiao的博客_04"); //为分数值加上增量 System.out.println(jedis.zincrby("math-score", 15, "pan_junbiao的博客_03")); System.out.println(jedis.zincrby("math-score", -5, "pan_junbiao的博客_04")); //返回有序集合中指定区间分数的成员数 System.out.println("分数在90至100的人数:" + jedis.zcount("math-score", 90, 100)); //获取在指定区间内的元素(升序) Set<String> ascSet = jedis.zrange("math-score",0,-1); System.out.println("分数排名(从低到高):"); for(String str : ascSet) { System.out.println("用户名称:" + str + " 分数:" + jedis.zscore("math-score",str)); } //获取在指定区间内的元素(降序) Set<String> descSet = jedis.zrevrange("math-score",0,-1); System.out.println("分数排名(从高到低):"); for(String str : descSet) { System.out.println("用户名称:" + str + " 分数:" + jedis.zscore("math-score",str)); } }
hash
/** * Reids的哈希(Hash)类型 * @author pan_junbiao */ @Test public void redisMap() { Jedis jedis = getJedis(); Map<String,String> map = new HashMap<String,String>(); map.put("userName","pan_junbiao的博客"); map.put("blogUrl","https://blog.csdn.net/pan_junbiao"); map.put("blogRemark","您好,欢迎访问 pan_junbiao的博客"); map.put("city","深圳"); jedis.hmset("userInfo",map); //删除map中的某个键值 System.out.println("删除map中的某个键值:" + jedis.hdel("userInfo","city")); //判断指定键值是否存在 System.out.println("判断指定键是否存在:" + jedis.exists("userInfo")); //返回map对象中的所有key System.out.println("返回map对象中的所有key:" + jedis.hkeys("userInfo")); //返回map对象中的所有value List<String> list = jedis.hvals("userInfo"); for (String str : list) { System.out.println(str); } }
示例3:
String+key
/** * 使用jedis的基本操作 */ private static void opsBase(Jedis jedis) { System.out.println("向redis中设置一个key " + jedis.set("key1", "value1")); System.out.println("向redis中设置一个key " + jedis.set("key2", "value2")); System.out.println("选择redis的一个数据库 " + jedis.select(0)); System.out.println("查看当前数据库的大小 " + jedis.dbSize()); System.out.println("查看redis中所有的key " + jedis.keys("*")); System.out.println("查看某个键对应值的数据类型 " + jedis.type("key1")); System.out.println("判断redis中是否存在一个key " + jedis.exists("key1")); System.out.println("设置redis中的一个key的过期时间 " + jedis.expire("key1", 10)); System.out.println("查看redis中的这个key还有多长时间过期 " + jedis.ttl("key1")); System.out.println("删除redis中的一个键值对 " + jedis.del("key1")); System.out.println("清空当前的数据库 " + jedis.flushDB()); System.out.println("清空所有的数据库 " + jedis.flushAll()); System.out.println("将当前的数据库的一个键值对移动到另外一个数据库 " + jedis.move("key2", 1)); } /** * 使用jedis操作string类型的数据 */ private static void opsString(Jedis jedis) { System.out.println("向redis中设置一个key " + jedis.set("key1", "value1")); System.out.println("只有当key不存在的时候再向redis中设置 " + jedis.setnx("key1", "value2")); System.out.println("向redis中设置一个key并设置过期时间 " + jedis.setex("key2", 10, "value2")); System.out.println("向redis中的某个key的值追加字符串 " + jedis.append("key1", "2")); System.out.println("获取redis中某个key对应的值 " + jedis.get("key1")); System.out.println("返回redis中某个key对应的值的长度大小 " + jedis.strlen("key1")); System.out.println("使用某个字符串从指定开始位置覆盖key对应的值到相同长度 " + jedis.setrange("key1", 0, "yh")); System.out.println("获取指定索引区间的字符串 " + jedis.getrange("key1", 0, 1)); System.out.println("批量设置key和value " + jedis.mset("key3", "value3", "key4", "value4", "key5", "1")); System.out.println("批量获取redis中的值 " + jedis.mget("key3", "key4", "key5")); System.out.println("将redis中key对应的值加一 " + jedis.incr("key5")); System.out.println("将redis中key对应的值加指定的步长 " + jedis.incrBy("key5", 2)); System.out.println("将redis中key对应的值减一 " + jedis.decr("key5")); System.out.println("将redis中key对应的值减指定的步长 " + jedis.decrBy("key5", 2)); }
list
/** * 使用jedis操作list类型的数据 */ private static void opsList(Jedis jedis) { System.out.println("从左边向集合中添加元素 " + jedis.lpush("list1", "value1")); System.out.println("从右边向集合中添加元素 " + jedis.rpush("list1", "value2")); System.out.println("从集合的左边弹出一个元素 " + jedis.lpop("list1")); System.out.println("从集合的右边弹出一个元素 " + jedis.rpop("list1")); System.out.println("从左边向集合中添加元素 " + jedis.lpush("list1", "value1")); System.out.println("从右边向集合中添加元素 " + jedis.rpush("list1", "value2")); System.out.println("查看集合中元素的数量 " + jedis.llen("list1")); System.out.println("覆盖集合中指定位置的key的值 " + jedis.lset("list1", 0, "value")); System.out.println("从后往前删除两个集合中指定值的元素 " + jedis.lrem("list1", -2, "value2")); System.out.println("获取集合中指定下标的元素 " + jedis.lindex("list1", 0)); System.out.println("在制定元素之前或者之后插入一个元素" + jedis.linsert("list1", BinaryClient.LIST_POSITION.BEFORE, "value", "before")); System.out.println("列举集合中的所有元素 " + jedis.lrange("list1", 0, -1)); }
hash
/** * 使用jedis操作hash类型的数据 */ private static void opsHash(Jedis jedis) { System.out.println("向redis中的key对应的map中put一个值 " + jedis.hset("map1", "key1", "value1")); System.out.println("向redis中的key对应的map中put多个值 " + jedis.hmset("map1", new HashMap<String,String>(8) { { this.put("key2", "value2"); this.put("key3", "value3"); this.put("key4", "1"); } })); System.out.println("获取redis中key对应map的某个值 " + jedis.hget("map1", "key1")); System.out.println("获取redis中key对应map的多个值 " + jedis.hmget("map1", "key1", "key2")); System.out.println("获取redis中key对应map的键值对数量 " + jedis.hlen("map1")); System.out.println("获取redis中key对应map的所有的key的value的值 " + jedis.hgetAll("map1")); System.out.println("获取redis中key对应map的所有的键 " + jedis.hkeys("map1")); System.out.println("获取redis中key对应map的所有的值 " + jedis.hvals("map1")); System.out.println("如果map对应的key不存在才设置 " + jedis.hsetnx("map1","key4", "2")); System.out.println("给map中的某个key对应的值增长对应的值 " + jedis.hincrBy("map1", "key4", 2)); }
set和zset
/** * 使用jedis操作set类型的数据 */ private static void opsSet(Jedis jedis) { System.out.println("向set中添加一个或多个元素 " + jedis.sadd("set1", "value1", "value2", "value3", "value4", "value5", "value6")); System.out.println("获得set中的元素个数 " + jedis.scard("set1")); System.out.println("判断set中是否存在某个元素 " + jedis.sismember("set1", "value1")); System.out.println("获得set中的所有元素 " + jedis.smembers("set1")); System.out.println("删除set中的一个或者多个元素 " + jedis.srem("set1", "value5", "value6")); System.out.println("随机弹出set中的某个元素 " + jedis.spop("set1")); System.out.println("向set中添加一个或多个元素 " + jedis.sadd("set2", "value1", "value2")); System.out.println("获得两个set的差集 " + jedis.sdiff("set1", "set2")); System.out.println("获得两个set的差集并转储到另外一个set中 " + jedis.sdiffstore("set3", "set1", "set2")); System.out.println("获得两个set的交集 " + jedis.sinter("set1", "set2")); System.out.println("获得两个set的交集并转储到另外一个set中 " + jedis.sinterstore("set3", "set1", "set2")); System.out.println("获得两个set的并集 " + jedis.sunion("set1", "set2")); System.out.println("获得两个set的并集并转储到另外一个set中 " + jedis.sunionstore("set3", "set1", "set2")); System.out.println("获得set中的所有元素 " + jedis.smembers("set3")); } /** * 使用jedis操作zset类型的数据 * 带分数输出值的时候返回的是字节数组 */ private static void opsSortedSet(Jedis jedis) { System.out.println("向zset中添加一个元素 " + jedis.zadd("sortedSet1",10,"value")); System.out.println("向zset中添加多个元素 " + jedis.zadd("sortedSet1", new HashMap<String, Double>(8) { { this.put("value1", 20D); this.put("value2", 30D); this.put("value3", 40D); this.put("value4", 50D); } })); System.out.println("统计zset中的元素个数 " + jedis.zcard("sortedSet1")); System.out.println("修改zset中某个元素的分数 " + jedis.zincrby("sortedSet1",-10D,"value")); System.out.println("删除zset中的一个或多个元素 " + jedis.zrem("sortedSet1", "value3", "value4")); System.out.println("正序获取zset中指定索引范围内的元素 " + jedis.zrange("sortedSet1", 0, -1)); System.out.println("正序获取zset中指定索引范围内的元素及元素的分数" + jedis.zrangeWithScores("sortedSet1", 0, -1)); System.out.println("正序获取zset中指定分数范围内的元素 " + jedis.zrangeByScore("sortedSet1", 0, 40)); System.out.println("正序获取zset中指定分数范围内的元素及元素的分数" + jedis.zrangeWithScores("sortedSet1", 0, 40)); System.out.println("逆序获取zset中指定索引范围内的元素 " + jedis.zrevrange("sortedSet1", 0, -1)); System.out.println("逆序获取zset中指定索引范围内的元素及元素的分数" + jedis.zrevrangeWithScores("sortedSet1", 0, -1)); System.out.println("逆序获取zset中指定分数范围内的元素 " + jedis.zrevrangeByScore("sortedSet1", 40, 0)); System.out.println("逆序获取zset中指定分数范围内的元素及元素的分数" + jedis.zrevrangeByScoreWithScores("sortedSet1", 40, 0)); }
Redis6新增3个数据类型
/** * 使用jedis测试基数数据类型 */ private static void opsHyperLogLog(Jedis jedis) { System.out.println("向一个数据组中添加数据 " + jedis.pfadd("hyperLogLog", "a", "b", "c", "d", "e", "f", "a", "a", "b")); System.out.println("向一个数据组中添加数据 " + jedis.pfadd("hyperLogLog1", "a", "b", "c", "d")); jedis.pfmerge("hyperLogLog0","hyperLogLog", "hyperLogLog1"); System.out.println("输出指定key的基数是多少 " + jedis.pfcount("hyperLogLog0")); } /** * 使用jedis操作geospatial类型的数据 */ private static void opsGeo(Jedis jedis) { System.out.println("向geo中添加地图位置信息 " + jedis.geoadd("geo1", 116.404269d, 39.91582d, "beijing")); System.out.println("向geo中添加地图位置信息 " + jedis.geoadd("geo1", 121.478799d, 31.235456d, "shanghai")); System.out.println("返回某几个地点的地理位置信息 " + jedis.geopos("geo1","beijing", "shanghai")); System.out.println("返回两个地点之间的直线距离 " + jedis.geodist("geo1", "beijing", "shanghai")); System.out.println("返回指定经纬度多少距离以内的元素 " + jedis.georadius("geo1", 116.404269d, 39.91582d,1500, GeoUnit.KM)); System.out.println("返回指定元素多少距离以内的元素 " + jedis.georadiusByMember("geo1", "beijing",1500, GeoUnit.KM)); } /** * 使用jedis操作bitmaps类型的数据 */ private static void opsBitMaps(Jedis jedis) { System.out.println("向bit中设置数据" + jedis.setbit("bit1",0,true)); System.out.println("向bit中设置数据" + jedis.setbit("bit1",5,false)); System.out.println("向bit中设置数据" + jedis.setbit("bit1",10,false)); System.out.println("获取指定索引上的数字 " + jedis.getbit("bit1",4)); System.out.println("返回bitmaps上共有多少true " + jedis.bitcount("bit1")); } }
Jedis实例:手机验证码功能
要求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
代码展示:
import redis.clients.jedis.Jedis; import java.util.Random; public class PhoneCode { public static void main(String[] args) { //测试 // String code = getCode(); // System.out.println(code); //模拟验证码发送 //verifyCode("137000000"); //校验发送的验证码 //getRedisCode("137000000","验证码"); } //1.随即生成一个六位数的验证码 public static String getCode(){ Random random = new Random(); String code = ""; for (int i = 0; i < 6; i++) { int rand = random.nextInt(10); code += rand; } return code; } //2.每个手机每天只能发送三次,验证码放到redis中,设置过期时间120 public static void verifyCode(String phone){ //连接redis Jedis jedis = new Jedis("127.0.0.1", 6379); //输入redis连接密码 //jedis.auth("root"); //拼接key //手机发送次数key String countKey = "VerifyCode" + phone + ":count"; //验证码key String codeKey = "VerifyCode" + phone + ":code"; //每个手机每天只能发送3次 String count = jedis.get(countKey); if (count == null){ //没有发送次数,第一次发送 //设置发送次数是1 jedis.setex(countKey,24 * 60 * 60,"1"); }else if (Integer.parseInt(count) <= 2){ //发送次数+1 jedis.incr(countKey); }else if (Integer.parseInt(count) > 2){ //发送三次了,不能再发送了 System.out.println("今天的发送次数已经超过3次了"); //关闭连接 jedis.close(); } //发送的验证码要放到redis中,设置过期时间为120s String vcode = getCode(); jedis.setex(codeKey,120,vcode); jedis.close(); } //3.验证码校验 public static void getRedisCode(String phone,String code){ //从redis中获取验证码 Jedis jedis = new Jedis("127.0.0.1", 6379); //jedis.auth("root"); //验证码key String codeKey = "VerifyCode" + phone + ":code"; String redisCode = jedis.get(codeKey); //判断 if (redisCode.equals(code)){ System.out.println("成功"); }else { System.out.println("失败"); } jedis.close(); } }
标签:redis,CRUD,System,Jedis,key,println,jedis,out 来源: https://www.cnblogs.com/aimangguo/p/16398565.html