Reids-10、Jedis

本文详细介绍了如何使用Java的Jedis库连接和操作Redis,包括键的通用操作、字符串操作、整数浮点数操作、列表、集合、有序集合和哈希的操作。此外,还讲解了Redis的排序和事务处理,提供了具体的代码示例,帮助读者理解并掌握Java操作Redis的各种方法。
摘要由CSDN通过智能技术生成


使用java操作Redis的中间件(JAR),Jedis是Redis官方推荐的java连接工具。

连接测试

创建Maven项目,添加相关依赖:

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.2.0</version>
</dependency>
<!-- fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

创建一个测试类,通过redis的ping命令测试是否连接成功

public class Ping {

    public static void main(String[] args) {
        String host = "111.111.111.111";
        int port = 6379;
        Jedis jedis = new Jedis(host, port);
        System.out.println(jedis.ping());
    }
}

注意:如果使用阿里云服务器搭建Redis,需要额外做两个操作,不然会报错

设置阿里云ECS安全组,登录阿里云账户点击ECS实例,找到安全组,快速添加一个Redis,百度有很多

Redis本身配置文件也需要修改两个地方:1、注释掉bind 2、protected-mode修改为no,具体可参考:https://blog.csdn.net/zihonggege/article/details/106109359

常用API

这一节可以参考:

对键的通用操作

方法描述返回值/说明
jedis.flush
jedis.flushDB清空数据
boolean jedis.exists(String key)判断某个键是否存在true = 存在,false= 不存在
jedis.set(String key,String value)新增键值对(key,value)返回String类型的OK代表成功
Set<String> jedis.keys(*)获取所有key返回set 无序集合
jedis.del(String key)删除键为key的数据项
jedis.expire(String key,int i)设置键为key的过期时间为i秒
int jedis.ttl(String key)获取建委key数据项的剩余时间(秒)
jedis.persist(String key)移除键为key属性项的生存时间限制
jedis.type(String key)查看键为key所对应value的数据类型

对字符串的操作

语法描述
jedis.set(String key,String value)增加(或覆盖)数据项
jedis.setnx(String key,String value)不覆盖增加数据项(重复的不插入)
jedis.setex(String ,int t,String value)增加数据项并设置有效时间
jedis.del(String key)删除键为key的数据项
jedis.get(String key)获取键为key对应的value
jedis.append(String key, String s)在key对应value 后边扩展字符串 s
jedis.mset(String k1,String V1,String K2,String V2,…)增加多个键值对
String[] jedis.mget(String K1,String K2,…)获取多个key对应的value
jedis.del(new String[](String K1,String K2,… ))删除多个key对应的数据项
String jedis.getSet(String key,String value)获取key对应value并更新value
String jedis.getrang(String key , int i, int j)获取key对应value第i到j字符 ,从0开始,包头包尾

对整数和浮点数操作

语法描述
jedis.incr(String key)将key对应的value 加1
jedis.incrBy(String key,int n)将key对应的value 加 n
jedis.decr(String key)将key对应的value 减1
jedis.decrBy(String key , int n)将key对应的value 减 n

对列表(List)的操作

语法描述
jedis.lpush(String key, String v1, String v2,…)添加一个List , 注意:如果已经有该List对应的key, 则按顺序在左边追加 一个或多个
jedis.rpush(String key , String vn)key对应list右边插入元素
jedis.lrange(String key,int i,int j)获取key对应list区间[i,j]的元素,注:从左边0开始,包头包尾
jedis.lrem(String key,int n , String val)删除list中 n个元素val
jedis.ltrim(String key,int i,int j)删除list区间[i,j] 之外的元素
jedis.lpop(String key)key对应list ,左弹出栈一个元素
jedis.rpop(String key)key对应list ,右弹出栈一个元素
jedis.lset(String key,int index,String val)修改key对应的list指定下标index的元素
jedis.llen(String key)获取key对应list的长度
jedis.lindex(String key,int index)获取key对应list下标为index的元素
jedis.sort(String key)把key对应list里边的元素从小到大排序

对集合(Set)的操作

语法操作
jedis.sadd(String key,String v1,String v2,…)添加一个set
jedis.smenbers(String key)获取key对应set的所有元素
jedis.srem(String key,String val)删除集合key中值为val的元素
jedis.srem(String key, Sting v1, String v2,…)删除值为v1, v2 , …的元素
jedis.spop(String key)随机弹出栈set里的一个元素
jedis.scared(String key)获取set元素个数
jedis.smove(String key1, String key2, String val)将元素val从集合key1中移到key2中
jedis.sinter(String key1, String key2)获取集合key1和集合key2的交集
jedis.sunion(String key1, String key2)获取集合key1和集合key2的并集
jedis.sdiff(String key1, String key2)获取集合key1和集合key2的差集

对有序集合(Zset)的操作

语法描述
jedis.zadd(String key,Map map)添加一个ZSet
jedis.hset(String key,int score , int val)往 ZSet插入一个元素(Score-Val)
jedis.zrange(String key, int i , int j)获取ZSet 里下表[i,j] 区间元素Val
jedis. zrangeWithScore(String key,int i , int j)获取ZSet 里下表[i,j] 区间元素Score - Val
jedis.zrangeByScore(String , int i , int j)获取ZSet里score[i,j]分数区间的元素(Score-Val)
jeids.zscore(String key,String value)获取ZSet里value元素的Score
jedis.zrank(String key,String value)获取ZSet里value元素的score的排名
jedis.zrem(String key,String value)删除ZSet里的value元素
jedis.zcard(String key)获取ZSet的元素个数
jedis.zcount(String key , int i ,int j)获取ZSet总score在[i,j]区间的元素个数
jedis.zincrby(String key,int n , String value)把ZSet中value元素的score+=n

对哈希(Hash)的操作

语法描述
jedis.hmset(String key,Map map)添加一个Hash
jedis.hset(String key , String key, String value)向Hash中插入一个元素(K-V)
jedis.hgetAll(String key)获取Hash的所有(K-V) 元素
jedis.hkeys(String key)获取Hash所有元素的key
jedis.hvals(String key)获取Hash所有元素 的value
jedis.hincrBy(String key , String k, int i)把Hash中对应的k元素的值 val+=i
jedis.hdecrBy(String key,String k, int i)把Hash中对应的k元素的值 val-=i
jedis.hdel(String key , String k1, String k2,…)从Hash中删除一个或多个元素
jedis.hlen(String key)获取Hash中元素的个数
jedis.hexists(String key,String K1)判断Hash中是否存在K1对应的元素
jedis.hmget(String key,String K1,String K2)获取Hash中一个或多个元素value

排序操作

使用排序, 首先需要生成一个排序对象

SortingParams sp = new SortingParams();
List<String> sortList = jedis.sort("list", sp.desc());

这里得到的sortList是一个排好序的新对象,数据库中的list并未改变

语法描述
jedis.sort(String key,sortingParams.alpha())队列按首字母a-z 排序
jedis.sort(String key, sortingParams.asc() )队列按数字升序排列
jedis.sort(String key , sortingParams.desc())队列按数字降序排列

事务操作

    public static void main(String[] args) {
        Jedis jedis = JedisUtil.connect();

        JSONObject obj = new JSONObject();
        obj.put("username", "张三");
        obj.put("age", 18);
        obj.put("sex", "男");
        
        String user = obj.toJSONString();
        Transaction multi = jedis.multi(); // 开启事务
        // jedis.watch(user); 添加监控 乐观锁
      
        try {
            multi.set("user:1", user);
            int i = 1/0;
            multi.exec(); // 提交事务
        } catch (Exception e) {
            multi.discard(); // 放弃事务
            // jedis.unwatch(); // 手动关闭监控
            e.printStackTrace();
        } finally {
            System.out.println(jedis.get("user:1"));
            jedis.close(); // 关闭连接
        }

    }

正常提交事物后需要关闭连接

如果出现异常『开放 int i = 1/0;』,事务将不能被执行,我们需要手动的放弃事务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值