分析Jedis源码实现操作非关系型数据库Redis

如果测试项目用的maven依赖,先把maven坐标准备好
<!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency>    <groupId>redis.clients</groupId>    <artifactId>jedis</artifactId>    <version>2.9.0</version></dependency>


import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

import java.util.Map;
import java.util.Set;

/**
 * Jedis工具类
 */
public class JedisUtil {
    private String ip ="127.0.0.1";
    private int port = 8001;
    public JedisUtil(){

    }
    public JedisUtil(String ip,int port){
        this.ip = ip;
        this.port = port;
    }

    /**
     * 获得redis对象
     * @return 获得redis对象
     */
    public Jedis createJedis(){
        Jedis jedis = new Jedis(ip,port);
        return jedis;
    }

    /**
     * 获得redis对象
     * @param ip 连接redis的IP地址
     * @param port 连接redis的端口号
     * @return 获得redis对象
     */
    public Jedis createJedis(String ip,int port){
        Jedis jedis = new Jedis(ip,port);
        return jedis;
    }

    /**
     * 保存字符串
     * @param key
     * @param val
     */
    public void setString(String key,String val){
        createJedis().set(key,val);
    }

    /**
     * 保存二进制
     * @param key
     * @param val
     */
    public void setByte(byte [] key,byte [] val){
        createJedis().set(key, val);
    }

    /**
     * 根据key获得字符串
     * @param key
     * @return
     */
    public String getString(String key){
        return createJedis().get(key);
    }

    /**
     * 获取二进制
     * @param key
     * @return
     */
    public byte [] getByte(byte [] key){
        return createJedis().get(key);
    }

    /**
     * 根据key删除
     * @param key
     */
    public void del(String key){
        createJedis().del(key);
    }

    /**
     * 保存整数
     * @param key
     * @param val
     */
    public void setInt(String key,String val){

    }

    /**
     * 设置过期时间
     * @param key 键
     * @param val 值
     * @param time 过期时间
     */
    public void setexBasic(String key,String val,int time){
        createJedis().setex(key,time,val);
    }

    /**
     * 对二进制key-val设置过期时间
     * @param key
     * @param time
     * @param val
     */
    public void setexCyte(byte [] key,int time,byte [] val){
        createJedis().setex(key,time,val);
    }

    /**
     *设置哈希值
     * @param key
     * @param map
     */
    public void setHash(String key, Map<String,String> map){
        createJedis().hmset(key, map);
    }

    /**
     * 获取哈希值
     * @param key
     * @param field
     * @return
     */
    public String getHash(String key,String field){
        return createJedis().hget(key,field);
    }

    /**
     * 向队列中放数据
     * @param key
     * @param tag 0 左边,1右边
     * @param strings
     */
    public void setQueue(String key,int tag,String...strings){
        if (tag == 0){
            // 左边放
            createJedis().lpush(key,strings);
        }else if (tag == 1){
            // 右边放
            createJedis().rpush(key, strings);
        }
    }

    /**
     * 向队列中获取数据
     * @param key
     * @param tag 0 左边取,1右边取
     * return
     */
    public String getQueue(String key,int tag){
        if (tag == 0){
            // 左边取
            return createJedis().lpop(key);
        }else if (tag == 1){
            // 右边取
            return createJedis().rpop(key);
        }
        return null;
    }

    /**
     * 添加集合
     * @param key
     * @param strings
     */
    public void sadd(String key,String...strings){
        Jedis jedis = createJedis();
        jedis.sadd(key, strings);
        jedis.close();
    }

    /**
     * 获取差集
     * @param strings
     * @return
     */
    public Set<String> sdiff(String...strings){
        Jedis jedis = createJedis();
        Set<String> set = jedis.sdiff(strings);
        jedis.close();
        return set;
    }

    /**
     * 获取交集
     * @param strings
     * @return
     */
    public Set<String> sinter(String...strings){
        Jedis jedis = createJedis();
        Set<String> set = jedis.sinter(strings);
        jedis.close();
        return set;
    }

    /**
     * 添加有序集合
     * @param key
     * @param map
     */
    public void zadd(String key,Map<String,Double> map){
        Jedis jedis = createJedis();
        jedis.zadd(key, map);
        jedis.close();
    }

    /**
     * 给元素增量
     * @param key
     * @param score
     * @param member
     * @return 增量后的数
     */
    public Double zincreby(String key,double score,String member){
        Jedis jedis = createJedis();
        Double d =  jedis.zincrby(key, score, member);
        return d;
    }

    /**
     * 返回升序排列的集合
     * @param key
     * @return
     */
    public Set<String> zrange(String key){
        Jedis jedis = createJedis();
        Set<String> set = jedis.zrange(key,0,-1);
        return  set;
    }

    /**
     * 返回降序排列的集合
     * @param key
     * @return
     */
    public Set<String> zrevrange(String key){
        Jedis jedis = createJedis();
        Set<String> set = jedis.zrevrange(key,0,-1);
        return set;
    }

    /**
     * 返回降序排序的集合,带上分数
     * @param key
     * @return
     */
    public Set<Tuple> zrevrangeWithScores(String key){
        Jedis jedis = createJedis();
        Set<Tuple> set = jedis.zrevrangeWithScores(key,0,-1);
        return set;
    }

}

原文地址:https://www.cnblogs.com/givre-foudre/p/12343575.html

时间: 2024-10-22 07:21:26

分析Jedis源码实现操作非关系型数据库Redis的相关文章

非关系型数据库Redis学习(1)

NoSQL 泛指非关系型数据库 特点:1.处理超大量的数据 2.运行在便宜的pc服务器集群上  3.击碎了性能的瓶颈 Redis是一个高性能的key-value数据库,存储的value类型包括string字符串.list链表.set(集合).zset(有序集合).数据缓存在内存中,也可以周期性的把更新的数据写入磁盘,或把修改的操作写入追加的记录文件中 Redis使用场合 1. application -> Redis 2. 应用程序直接访问Redis,只有当Redis访问失败时,才访问mysql

非关系型数据库--Redis基础

redis是一个开源的key-value数据库,其特点就是基于键值存储数据: 它又经常被认为是一个数据结构服务器.因为它的value不仅包括基本的string类型还有list,set ,sorted set和hash类型. redis官网地址:https://redis.io/ redis服务文件: rpm -ql redis #查看redis安装后生成的文件信息,如配置文件.日志文件和服务文件 /etc/redis.conf #主配置文件 /usr/bin/redis-server #redi

OpenStack_Swift源码分析——Object-auditor源码分析(2)

1 Object-aduitor审计具体分析 上一篇文章中,讲解了Object-aduitor的启动,其中审计的具体执行是AuditorWorker实现的,在run_audit中实例化了AuditorWorker类,并调用audit_all_objects方法,下面看此方法的具体代码实现: def audit_all_objects(self, mode='once', device_dirs=None): #run_forever传过来的mode 为forever description =

转 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)

深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇) 最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前九篇中,介绍了mybatis的配置以及使用, 那么本篇将走进mybatis的源码,分析mybatis 的执行流程, 好啦,鄙人不喜欢口水话,还是直接上干活吧: 1. SqlSessionFactory 与 SqlSession. 通过前面的章节对于mybatis 的介绍及使用,大家都能体会到SqlSession的重要性了吧, 没错,从表面上来看,

Android源码分析--MediaServer源码分析(二)

在上一篇博客中Android源码分析–MediaServer源码分析(一),我们知道了ProcessState和defaultServiceManager,在分析源码的过程中,我们被Android的Binder通信机制中的各种复杂的类关系搞的眼花缭乱,接下来我们就以MediaPlayerService为例来分析一下Binder的通信机制.首先来回顾一下: BpBinder和BBinder都是Android中Binder通信的代表类,其中BpBinder是客户端用来与Server交互的代理类,p代

OpenStack_Swift源码分析——ObjectReplicator源码分析(2)

1.Replicator执行代码详细分析 上篇问中介绍了启动Replicator的具体过程,下面讲解Replicator的执行代码的具体实现,首先看replicate方法: def replicate(self, override_devices=None, override_partitions=None): """Run a replication pass""" self.start = time.time() self.suffix_co

分析easyswoole源码

分析easyswoole源码 1以启动为例 //检查是否已经安装 installCheck();//检查锁文件是否存在,不存在结束 //启动服务 serverStart showLogo();//显示logo $conf = Conf::getInstance();//获取config单例 $inst = Core::getInstance()->initialize();//获取Core(核心类)的单例并且initialize //这一步干了这些事情 //__construct() Core的

Caffe源码-im2col操作

目录 im2col简介 im2col.cpp源码 小结 参考 @(Caffe源码-im2col操作) im2col简介 caffe的卷积操作中使用im2col来加速,im2col将卷积核中的每个点在图像上的对应点全都提取出来按行排列,得到一个矩阵,这样就将卷积操作转化为矩阵进行操作. 如上图所示的,假设输入图像的形状为channels=1, height=width=5,并且pad_w=pad_h=1, kernel_h=kernel_w=3, stride_h=stride_w=2, dila

PHP源码来操作memcached服务

如何使用PHP源码来操作memcached服务 如果管理员不让我们去加载 memcache.dll 文件,我们可以直接通过源码操作 看高手的源代码也很有意思! 特点: 1.不需要开启memcache扩展 2.使用fsockopen()套接字连接memcached 3.同样执行执行CRUD 引用别人写的一个类: memcached-client.php <?php // // +------------------------------------------------------------