使用jedis操作redis常用方法
在redis入门及在商城案例中的使用中简单介绍了下使用jedis如何操作redis,但是其实方法是跟redis的操作大部分是相对应的。我这里做下记录
1、String类型操作
public class StringTest { Jedis jedis;
@Before//该注解下的方法在@Test执行之前执行
public void before(){
//创建连接
jedis = new Jedis("192.168.25.128",6379);
}
@After//该注解下的方法在@Test执行之后执行
public void after(){
//关闭连接
jedis.close();
}
/*
* 存储,获取,设置过期时间,key命令
*/
@Test
public void test() throws InterruptedException{
//1.存储值
jedis.set("name", "张三");
//2.取值
String name = jedis.get("name");
System.out.println(name);
//3.key命令:查看有效期,-1表示持久化
Long t = jedis.ttl("name");
System.out.println(t);
//4.key命令,对已经存在的key设置过期时间
jedis.expire("name", 5);
while(true){
String name2 = jedis.get("name");
System.out.println(name2);
System.out.println("有效期为:"+jedis.ttl("name")+"秒");
Thread.sleep(2000);
} }
输出结果:
张三
-1
-------------------
张三
有效期为:5秒
张三
有效期为:3秒
张三
有效期为:1秒
null
有效期为:-2秒
/*
* 测试自增自减:前提,value值能解析为数字类型
* 删除
*/
@Test
public void test2(){
jedis.set("age", "18");
String age1 = jedis.get("age");
System.out.println("当前年龄:"+age1); Long age2 = jedis.decr("age");
System.out.println("一年前年龄为:"+age2); Long age3 = jedis.incr("age");
System.out.println("现在年龄又变回为:"+age3); //如果key不存在则忽略此操作
Long del = jedis.del("age1");
}
输出结果:
当前年龄:18
一年前年龄为:17
现在年龄又变回为:18
/*
* 批量存储和获取
*/
@Test
public void test3(){
jedis.mset("a1","mysql","a2","oracle","a3","sqlServer","a4",
"redis","a5","mongodb","a6","hbase");
List list = jedis.mget("a1","a2","a3","a4","a5","a6");
for (String s : list) {
System.out.println(s);
}
}
输出结果:
mysql
oracle
sqlServer
redis
mongodb
hbase
/*
* 存储值的同时设置过期时间,判断key是否存在
*/
@Test
public void test4() throws InterruptedException{
//jedis.setex(key, 过期时间, value)
jedis.setex("life", 5, "享受美好");
while(jedis.exists("life")){
System.out.println(jedis.get("life"));
Thread.sleep(2000);
}
}
输出结果:在输出三个“享受美好”之后便不再输出
享受美好
享受美好
享受美好
2、Hash类型操作
public class MapTest { Jedis jedis;
@Before
public void before(){
jedis = new Jedis("192.168.25.128",6379);
}
@After
public void after(){
jedis.close();
} @Test
public void test1(){
//1.存储值
jedis.hset("student", "name", "小李");
jedis.hset("student", "class", "小学生");
jedis.hset("student", "age", "10");
jedis.hset("student", "skill", "keng");
//2.获取指定值 获取名字
String name = jedis.hget("student", "name");
System.out.println(name);
System.out.println("----------------------");
//3.获取存储的map
Map<string, string=""> all = jedis.hgetAll("student");
Set<entry<string,string>> set = all.entrySet();
Iterator<entry<string, string="">> iterator = set.iterator();
while (iterator.hasNext()) {
Entry<string, string=""> entry = iterator.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
System.out.println("------------------------------");
//4.获取map中全部key
Set keySet = jedis.hkeys("student");
for (String key : keySet) {
System.out.println(key);
}
System.out.println("-------------------------------");
//5.获取map中全部values
List list = jedis.hvals("student");
for (String value : list) {
System.out.println(value);
}
System.out.println("------------------");
//6.删除指定的值 删除map中class,name两对键值对
Long long1 = jedis.hdel("student", "class","name");
Set set2 = jedis.hkeys("student");
for (String key : set2) {
System.out.println(key);
}
System.out.println("-------------------");
//7.判断map是否存在
Boolean e = jedis.hexists("student", "class");
System.out.println("class是否存在:"+e);
System.out.println("-----------------");
//8.自增自减,可以指定增加减少的数值
jedis.hincrBy("student", "age", 2);
System.out.println(jedis.hget("student", "age"));
}
}
输出结果:
小李
----------------------
skill:keng
name:小李
class:小学生
age:10
------------------------------
name
class
age
skill
-------------------------------
10
keng
小李
小学生
------------------
age
skill
-------------------
class是否存在:false
-----------------
2年后年龄为:12
String跟Hash是最常见的类型,在实习这段时间也都只用到这两种,所以我觉得不管怎样这两种至少应该掌握。 3、List类型操作
public class ListTest {
Jedis jedis;
@Before
public void before(){
jedis = new Jedis("192.168.25.128",6379);
}
@After
public void after(){
jedis.close();
} @Test
public void test(){
//1.存储值(左边开始)。当成栈(子弹匣),先进先出,入栈
jedis.lpush("scores", "100","90","80","70","60");
//右边开始存
jedis.rpush("scores", "50","40","30","20","10");
//2.取值(左边开始),可以说是同时移除了该值,出栈
String lv = jedis.lpop("scores");
//右边开始取
String rv= jedis.rpop("scores");
System.out.println("左边取为:"+lv);
System.out.println("右边取为:"+rv);
System.out.println("--------------------");
//3.取所有值(只有左边开始取)0 -1表示取所有位置,位置是[start,end]
//redis命令行操作的时候已经演示过
List list = jedis.lrange("scores", 0, -1);
for (String value : list) {
System.out.println(value);
}
System.out.println("-----------");
//4.插队,44插入到100后面,注:没有什么rinsert()方法
jedis.linsert("scores",BinaryClient.LIST_POSITION .AFTER, "100", "44");
List list2 = jedis.lrange("scores", 0, -1);
for (String value : list2) {
System.out.println(value);
}
List list3 = jedis.lrange("scores", 0, 3);
for (String value : list3) {
System.out.println(value);
} }
}
输出结果:
左边取为:60
右边取为:10
--------------------
70
80
90
100
50
40
30
20
-----------
70
80
90
100
44
50
40
30
20
---------------
70
80
90
100
4、Set类型操作
public class JedisTest {
Jedis jedis;
@Before
public void before(){
jedis = new Jedis("192.168.25.128",6379);
}
@After
public void after(){
jedis.close();
}
/*
* 测试添加,取值,移除,判断
*/
@Test
public void test1(){
//1.存储
jedis.sadd("names", "Tom","Jack","Harry","Lucy","laowang");
//2.获取set中全部记录,取出来的跟存储的顺序不一样
Set members = jedis.smembers("names");
for (String member : members) {
System.out.println(member);
}
//3.移除指定数据
jedis.srem("names","Tome","Jack");
//4.判断某值是否为set中成员
Boolean tom = jedis.sismember("names", "Tome");
System.out.println("Tom在名单里吗:"+tom);
}
输出结果:
Jack
Harry
Lucy
Tom
laowang
Tom在名单里吗:false
/*
* 差集,交集,并集
*/
@Test
public void test2(){
jedis.sadd("set1", "a","b","c","d");
jedis.sadd("set2", "b","c","d","e");
//1.差集 set1中有set2中没有的
Set sdiff = jedis.sdiff("set1","set2");
for (String d : sdiff) {
System.out.println(d);
}
System.out.println("----------------");
//2.交集
Set sinter = jedis.sinter("set1","set2");
for (String in : sinter) {
System.out.println(in);
}
System.out.println("----------------");
//3.并集
Set sunion = jedis.sunion("set1","set2");
for (String un : sunion) {
System.out.println(un);
}
}
输出结果:
a
----------------
d
c
b
----------------
d
e
a
c
b
5、Zset(有序Set)类型操作
public class SortedSetTest {
Jedis jedis;
@Before
public void before(){
jedis = new Jedis("192.168.25.128",6379);
}
@After
public void after(){
jedis.close();
}
@Test
public void test1(){
//1.添加
jedis.zadd("table", 1, "a");
jedis.zadd("table", 3, "b");
jedis.zadd("table", 2, "c");
jedis.zadd("table", 5, "d");
jedis.zadd("table", 4, "e");
//2.取值 0 -1表示取所有,可以自己指定开始结束位置,跟list一样
//默认根据分数由低到高排
Set table = jedis.zrange("table", 0, -1);
for (String t : table) {
System.out.println(t);
}
System.out.println("-----------------");
//3.排序,由高到低排
Set table2 = jedis.zrevrange("table", 0, -1);
for (String t : table2) {
System.out.println(t);
}
System.out.println("-----------------");
//4.修改某个值的分数
jedis.zincrby("table", 7, "a");
Set table3 = jedis.zrevrange("table", 0, -1);
for (String t : table3) {
System.out.println(t);
}
}
}
输出结果:
a
c
b
e
d
-----------------
d
e
b
c
a
-----------------
a
d
e
b
c
使用jedis操作redis常用方法的更多相关文章
- 30个php操作redis常用方法代码例子
From: http://www.jb51.net/article/51884.htm 这篇文章主要介绍了30个php操作redis常用方法代码例子,本文其实不止30个方法,可以操作string类型. ...
- Jedis操作Redis数据库
添加Maven依赖: <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</grou ...
- 30 个 php 操作 redis 常用方法代码例子
这篇文章主要介绍了 30 个 php 操作 redis 常用方法代码例子 , 本文其实不止 30 个方法 , 可以操作 string 类型. list 类型和 set 类型的数据 , 需要的朋友可以参 ...
- Jedis操作Redis
Jedis操作Redis的常用封装方法 @Resource(name="jedispool") private JedisPool pool=null; /** * 设置缓存对象过 ...
- 四、Jedis操作Redis
前言: 原来我们操作mysql需要用的jdbc,现在操作redis则需要jedis,jedis是客户端,而redis是服务器,使用jedis客户端来操作redis. 在这里要使用jedis操作red ...
- JAVA中通过Jedis操作Redis连接与插入简单库
一.简述 JAVA中通过Jedis操作Redis连接与插入简单库 二.依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis ...
- jedis操作redis的几种常见方式总结
Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式,文中给出了详细的示例代码供大家参考学习 ...
- 爱漂泊人生 30个php操作redis常用方法代码例子
http://www.justwinit.cn/post/8789/ 背景:redis这个新产品在sns时很火,而memcache早就存在, 但redis提供出来的功能,好多网站均把它当memcach ...
- Jedis操作Redis技巧详解
对于Redis的部署模式有两种,单机模式 和 集群模式.因此,本文的介绍也从这两个方面进行介绍.众所周知,Jedis是最著名的Redis java客户端操作类库,几乎支持所有的Redis操作.本文就是 ...
随机推荐
- 谈谈JavaScript Navigator 对象属性
Navigator 对象属性 可以在Navigator对象上使用以下属性: 属性 描述 appCodeName 返回浏览器的代码名称 appName 返回浏览器的名称 appVersion 返回浏览器 ...
- SAP MM 同一个序列号可以被多次用在交货单发货过账?
SAP MM 同一个序列号可以被多次用在交货单发货过账? 如下公司间转储订单,从公司代码CSAS转入公司代码HKCS, 物料有启用序列号管理. 转储数量为5 PC.该STO单据共计有2个外向交货单 8 ...
- QString判断空 isEmpty
isEmpty Returns true if the string has no characters; otherwise returns false. QString().isEmpty(); ...
- 软工Alpha七天冲刺
七天冲刺博客: 1.第一篇Scrum冲刺博客 2.第二篇Scrum冲刺博客 3.第三篇Scrum冲刺博客 4.第四篇Scrum冲刺博客 5.第五篇Scrum冲刺博客 6.第六篇Scrum冲刺博客 7. ...
- sparkSQL中的example学习(2)
UserDefinedUntypedAggregate.scala(默认返回类型为空,不能更改) import org.apache.spark.sql.{Row, SparkSession} imp ...
- 白话SCRUM 之四:燃尽图
Burn down chart翻译为燃尽图或燃烧图,很形象,是Scrum中展示项目进展的一个指示器.我一直认为用户故事.每日站立会议.燃尽图.sprint review.sprint retrospe ...
- Python3字典排序
创建一个字典 dict1={'a':2,'b':3,'c':8,'d':4} 1.分别取键.值 取字典的所有键,所有的值,利用dict1.keys(),dict1.vaules(), 由于键,值有很多 ...
- JS高阶---闭包应用(自定义JS模块)
[自定义JS模块] [闭包案例] (1)案例1 对应的模块文件 (2)案例2---使用匿名函数 对应的模块文件 案例2分析:因为内部函数引用了外部函数的变量,且存在嵌套关系,所以是闭包,分析结构图如下 ...
- 深入理解defer(上)defer基础
深入理解 defer 分上下两篇文章,本文为上篇,主要介绍如下内容: 为什么需要 defer: defer 语法及语义: defer 使用要点: defer 语句中的函数到底是在 return 语句之 ...
- 201871010124-王生涛《面向对象程序设计(java)》第十五周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...