redis使用总结(二)(jedis使用)
Jedis使用(Jedis中的API和redis的指令基本相同)
1.创建maven工程,在pom文件中导入jedis的坐标
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2. 获取使用jedis获取redis的连接(注意:操作完成后将jedis的连接关闭)
private Jedis jedis;
@Before
public void before() {
jedis = new Jedis("localhost",6379);
}
@After
public void after() {
jedis.close();
}
3. jedis操作String类型
@Test
public void testStringDel() {
jedis.del("jedisStr");
String str = jedis.get("jedisStr");
System.out.println(str);
}
输出为 :myJedis
@Test
public void testStringSet() {
jedis.set("jedisStr","myJedis");
String str = jedis.get("jedisStr");
System.out.println(str);
}
输出为 :null
4. jedis操作hash类型
@Test
public void testHashSet() {
String[] strings = {"王重阳","洪七公","欧阳锋","黄药师","段智兴"};
//查看hset方法的源码,hset方法的三个参数都为String类型,所以将数组转换为json
String JSONStr = JSONObject.toJSONString(strings);
jedis.hset("jedisHash", "strings", JSONStr);
jedis.hset("jedisHash", "string", "JSONStr");
String hashStr = jedis.hget("jedisHash", "string");
String hashJSONStr = jedis.hget("jedisHash", "strings");
JSONArray hashJSONStrs = JSONObject.parseArray(hashJSONStr);
System.out.println(hashStr);
System.out.println(hashJSONStrs);
}
输出为 :JSONStr
["王重阳","洪七公","欧阳锋","黄药师","段智兴"]
@Test
public void testHashDel() {
jedis.hdel("jedisHash", "string");
String hashStr = jedis.hget("jedisHash", "string");
HashMap<String,String> map = (HashMap<String, String>) jedis.hgetAll("jedisHash");
System.out.println(hashStr);
System.out.println(map);
}
输出为 :null
{strings=["王重阳","洪七公","欧阳锋","黄药师","段智兴"]}
hset方法的源码:
public Long hset(final String key, final String field, final String value) {
checkIsInMultiOrPipeline();
client.hset(key, field, value);
return client.getIntegerReply();
}
hget方法的源码:
public String hget(final String key, final String field) {
checkIsInMultiOrPipeline();
client.hget(key, field);
return client.getBulkReply();
}
5. jedis操作list类型
@Test
public void testListPush() {
//lpush和rpush中value的参数是可变参数序列
jedis.lpush("jedisList", "one","two","three");
jedis.rpush("jedisList", "1","2","3");
List<String> list = jedis.lrange("jedisList", 0, -1);
System.out.println(list);
}
输出为 :[three, two, one, 1, 2, 3]
@Test
public void testListPop() {
String listStr1 = jedis.lpop("jedisList");
String listStr2 = jedis.rpop("jedisList");
List<String> list = jedis.lrange("jedisList", 0, -1);
System.out.println(listStr1);
System.out.println(listStr2);
System.out.println(list);
}
输出为 :three
3
[two, one, 1, 2]
6. jedis操作set类型
@Test
public void testSetAdd() {
jedis.sadd("jedisSet", "南帝","北丐","中神通");
Set<String> set = jedis.smembers("jedisSet");
System.out.println(set);
}
输出为 : [南帝, 中神通, 北丐]
@Test
public void testSetRem() {
jedis.srem("jedisSet", "中神通");
Set<String> set = jedis.smembers("jedisSet");
System.out.println(set);
}
输出为 :[南帝, 北丐]
7. jedis操作Sorted Set类型(ZSet)
@Test
public void testSortedSetAdd() {
Map<String, Double> map = new HashMap<String, Double>();
map.put("华佗", 36D);
map.put("张仲景", 66.6);
jedis.zadd("jedisZSet", 6, "扁鹊");
jedis.zadd("jedisZSet", map);
Set<String> set = jedis.zrange("jedisZSet", 0, -1);
Set<Tuple> zSet = jedis.zrangeWithScores("jedisZSet", 0, -1);
System.out.println(set);
for(Tuple tuple : zSet) {
System.out.print(tuple.getElement() + " ");
System.out.print(tuple.getScore()+ " ");
}
}
输出为 : [扁鹊, 华佗, 张仲景]
扁鹊 6.0 华佗 36.0 张仲景 66.6
@Test
public void testSortedSetRem() {
jedis.zrem("jedisZSet", "扁鹊");
Set<String> set = jedis.zrange("jedisZSet", 0, -1);
System.out.println(set);
}
输出为 : [华佗, 张仲景]
8. 其他redis的常用指令使用jedis操作
1) redis指令: dbsize :返回当前数据库的 key 的数量。
jedis操作:
@Test
public void testDbsize() {
Long size = jedis.dbSize();
System.out.println(size);
}
输出为 : 9
2) redis指令 Keys pattern:查找所有符合给定模式 pattern 的 key 。
jedis操作:
@Test
public void testKeys() {
Set<String> keys = jedis.keys("jedis*");
System.out.println(keys);
}
输出为 : [jedisList, jedisZSet, jedisSet, jedisStr, jedisHash]
3) redis指令 del key [key …] :删除给定的一个或多个key,以及对应的value,不存在的 key 会被忽略,该指令可以将任意数据类型删除
jedis操作:
@Test
public void testDel() {
jedis.del("jedisStr");
Set<String> keys = jedis.keys("jedis*");
System.out.println(keys);
}
输出为 : [jedisList, jedisZSet, jedisSet, jedisHash]
4) redis指令 type key :返回 key 所储存的值的类型。
jedis操作:
@Test
public void testType() {
String type = jedis.type("jedisHash");
System.out.println(type);
}
输出为 :hash
5)redis指令 exists key :检查指定key是否存在
jedis操作:
@Test
public void testExists() {
Boolean hashExists = jedis.exists("jedisHash");
Boolean strExists = jedis.exists("jedisStr");
System.out.println(hashExists);
System.out.println(strExists);
}
输出为 : true
false
6)redis指令 expire key seconds:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。seconds的单位为秒。
7)redis指令 ttl key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间。
jedis操作:
@Test
public void testExpireAndTtl() throws InterruptedException {
jedis.expire("jedisHash", 20);
Thread.sleep(2000L);
Long jedisHashExistsTime = jedis.ttl("jedisHash");
Long jedisStrExistsTime = jedis.ttl("jedisStr");
Long jedisZSetExistsTime = jedis.ttl("jedisZSet");
System.out.println(" jedisHash 存活时间 : " + jedisHashExistsTime);
System.out.println(" jedisStr 存活时间 : " + jedisStrExistsTime);
System.out.println(" jedisZSet 存活时间 : " + jedisZSetExistsTime);
}
输出为 :
jedisHash 存活时间 : 18
jedisStr 存活时间 : -2
jedisZSet 存活时间 : -1
7) redis指令 flushall:清空整个 Redis 服务器的数据(删除所有数据库的所有 key ),此命令从不失败。
flushdb :清空当前数据库中的所有 key,此命令从不失败。
jedis操作:("禁止在公司的正式项目中使用该命令")
@Test
public void testFlushdb() {
String str = jedis.flushDB();
Set<String> set = jedis.keys("*");
System.out.println(str);
System.out.println(set.isEmpty());
}
输出 :
OK
true
这时redis中数据被清空,在公司的正式项目中禁止使用该指令,需要删除数据尽量使用del指令或方法
127.0.0.1:6379> keys *
(empty list or set)
jedis连接池使用
jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术,
jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,
而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,
而是将该资源归还给连接池,供其他请求使用。
jedis连接池使用
@Test
public void testJedisPool(){
//1 获得连接池配置对象,设置配置项
JedisPoolConfig config = new JedisPoolConfig();
// 1.1 最大连接数
config.setMaxTotal(20);
//1.2 最大空闲连接数
config.setMaxIdle(10);
//获得连接池
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
Jedis jedis=null;
try {
//3.获得核心对象
jedis = jedisPool.getResource();
//4.设置数据
jedis.set("name","laocao");
//5.获得数据
String name = jedis.get("name");
System.out.println(name);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(jedis!=null){
//6.归还jedis连接到连接池中
jedis.close();
}
}
//虚拟机关闭时,释放pool资源
if(jedisPool!=null){
jedisPool.close();
}
}
我们在使用jedis连接池时不能每次都创建jedisPool,所以我们创建一个jedisPool的工具类
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisPoolUtil {
//jedis的url
private static String url;
//jedis的端口
private static int port;
//jedis的最大连接数
private static int maxtotal;
//jedis的最大空闲连接数
private static int maxwaitmillis;
//jedis连接池
private static JedisPool jedisPool;
//静态代码块保证jedisPool只初始化一次
static {
//读取配置文件 读取properties比较常用的是 Properties和ResourceBundle 这里使用的是Properties
InputStream inputStream = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro = new Properties();
//关联文件
try {
pro.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
//为属性赋值
url = pro.getProperty("jedis.url");
port = Integer.parseInt(pro.getProperty("jedis.port"));
maxtotal = Integer.parseInt(pro.getProperty("jedis.maxtotal"));
maxwaitmillis = Integer.parseInt(pro.getProperty("jedis.maxwaitmillis"));
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(maxtotal);
config.setMaxIdle(maxwaitmillis);
//初始化JedisPool
jedisPool = new JedisPool(config,url,port);
}
//获取jedis
public static Jedis getJedisResource() {
return jedisPool.getResource();
}
}
配置文件 :
jedis.url=127.0.0.1
jedis.port=6379
jedis.maxtotal=20
jedis.maxwaitmillis=10
文章部分借鉴了 @Roy-Xin 老兄jedis连接池的部分内容,在此表示感谢
redis使用总结(二)(jedis使用)的更多相关文章
- Spring Data Redis入门示例:基于Jedis及底层API (二)
使用底层API:RedisConnectionFactory和RedisConnection可以直接操作Redis,下面是一个简单的例子: ### Maven依赖 <properties> ...
- redis学习笔记(二)——java中jedis的简单使用
redis怎么在java中使用,那就是要用到jedis了,jedis是redis的java版本的客户端实现,原本原本想上来就直接学spring整合redis的,但是一口吃个胖子,还是脚踏实地,从基础开 ...
- Redis安装配置与Jedis访问数据库
一.NOSQL概要 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库.NoSQL数据库的四大分类 键值(Key-Value)存储数据库 这一类数据 ...
- redis linux 安装及jedis连接测试
一.安装配置 1:下载redis下载地址 http://code.google.com/p/redis/downloads/list推荐下载redis-1.2.6.tar.gz,之前这个版本同事已经有 ...
- Redis安装部署、Jedis的使用
一.NoSQL概述 为什么需要NoSQL High performance -高并发读写 Huge Storage - 海量数据的高效率存储和访问 High Scalability && ...
- 【转载】Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍
转载地址:http://blog.csdn.net/truong/article/details/46711045 关键字:Redis的Java客户端Jedis的八种调用方式(事务.管道.分布式…)介 ...
- springboot 集成Redis一主二从三哨兵
1.Centos7 Redis一主二从三哨兵配置 Redis一主二从三哨兵环境搭建 2.接入过程 与集成redis单机不同的是jedis相关的配置做了修改,JedisPool换成了JedisSenti ...
- Redis(四)Jedis客户端
一.客户端通信协议 二.Java客户端Jedis 1.获取Jedis Jedis属于Java的第三方开发包,在Java中获取第三方开发包通常有两种方式: 直接下载目标版本的Jedis-${versio ...
- Redis学习记录及Jedis代码示例
文章目录 二.Redis简介 三.Redis安装 1. 下载并解压安装 2. 安装C语言编译环境 3. 修改安装位置 4. 编译安装 5.启动Redis服务器 ①默认启动 ②定制配置项启动 [1]准备 ...
随机推荐
- 《Linux内核原理与分析》第一周作业 20189210
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...
- [EOJ Monthly 2018.10][C. 痛苦的 01 矩阵]
题目链接:C. 痛苦的 01 矩阵 题目大意:原题说的很清楚了,不需要简化_(:з」∠)_ 题解:设\(r_i\)为第\(i\)行中0的个数,\(c_j\)为第\(j\)列中0的个数,\(f_{i,j ...
- DataTable数据存储问题
需求: 我想要实现这样一个效果:用户可以在表中通过右键新建行.删除行(这两个后面再写),编辑数据后进行保存.这里保存需要做一个区分,就是新增的和修改的.他们的区别就是新增的主键为空,而修改的因为原本就 ...
- 前言|Elena
2019.3.19更新置顶 2018.11.5更新置顶 2018.9.7更新置顶 -这里写下置顶- 嗨嗨嗨 这里AlenaNuna,偏远小渔村oi蒟蒻一只,各大题库id有Elena/AlenaNuna ...
- django的分页与添加图片
分页: 在主页面的views里写接口 导包: from django.core.paginator import Paginator 接口: id=request.GET.get("page ...
- js 检查登录态方法封装(闭包、状态缓存)
前端页面开发时,经常需要异步校验登录态,每次都重新copy之前写的方法,比较繁琐不好维护,固将登录态校验封装成一个js. (function(){ //登录状态 1 登录态有效 2 登录态无效 3 请 ...
- mysql-5.7 通过apt或者yum安装方式
此文章仅记录使用apt-get安装mysql. 通过以下命令安装MySQL: shell> sudo apt-get install mysql-server 这将安装MySQL服务器的包,以及 ...
- C语言中负数的存储方式
详细介绍负数的文章: https://blog.csdn.net/daiyutage/article/details/8575248 1.以char类型举例,其取值范围是 -128 ~ 127,即-2 ...
- VisualStudioCode创建的asp.net core项目部署到IIS,以及遇到的问题
一.发布项目 在visual studio code中通过命令“dotnet publish”,如下图: 这里我把发布位置设置到了D:\WebSite\netcoredemo下. 二.设置IIS 0. ...
- Applet学习教程(一):applet+dwr 实现
后台代码 import java.applet.Applet; import java.util.HashMap; import java.util.Map; import netscape.java ...