使用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操作.本文就是 ...
 
随机推荐
- Dikstra 堆优化板子
			
#include <bits/stdc++.h> #define MAXN 10005 using namespace std; typedef long long LL; vector& ...
 - 关于项目中js原型的使用
			
在一个项目中为了减少全局变量的使用及模块化的开发我们使用的构造函数加原型的开发模式 var App = function(){ //管理构造函数的属性 this.name = 'jack' } //页 ...
 - LeetCode: 404.左叶子节点
			
计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 解析 我们需要找到这样的节点 属于叶子节点 属于父 ...
 - LeetCode学习_day1:原地算法
			
原地算法:是一种使用小的,固定数量的额外之空间来转换资料的算法.当算法执行时,输入的资料通常会被要输出的部份覆盖掉. 范例:冒泡排序.选择排序.插入排序.希尔排序 (1)冒泡排序: 冒泡排序算法的原理 ...
 - DDL创建数据库,表以及约束(极客时间学习笔记)
			
DDL DDL是DBMS的核心组件,是SQL的重要组成部分. DDL的正确性和稳定性是整个SQL发型的重要基础. DDL的基础语法及设计工具 DDL的英文是Data Definition Langua ...
 - Odoo 启动选项总结
			
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189209.html 一:启动选项用在哪里 如果你是用Pycharm进行odoo二次开发的话,可以通过 R ...
 - 2.2 Scala基础知识
			
一.基本数据类型和变量 1.基本数据类型 java中每一个数据类型都是一个类: scala没有自己定义String类型,String类型是从java.lang.String照搬的. 字面量(liter ...
 - RST复位报文
			
复位报文段: 一些特殊情况,TCP一端向另一端发送复位报文,以通知对方关闭链接或者重新建立链接. 产生复位报文的三种情况: 1. 当客户端访问一个不存在的端口时,目标主机会给客户端发送一个复位报文段. ...
 - Visual Studio 2017 软件包及教程
			
下载地址:https://files.cnblogs.com/files/yungle/VisualStudio2017.rar 安装教程:https://mp.weixin.qq.com/s?__b ...
 - mysql select limit 大数据量查询 性能终极提升方法
			
还是广告位 我们的使用mysql的时候总是想当然的使用 select × from tables where a>0 order by id desc limit 500000,200 当我们真 ...