基本操作

  1. //默认参数host,port,timeout,可以只写host
  2. Jedis jedis = new Jedis(RedisIP, RedisPORT);//创建连接
  3. jedis.auth(password);//设置连接密码,返回状态码
  4. jedis.select(0); //选择db,这里选择0号数据库,不选择的话默认也会选择0号
  5. Long expire(String key, int seconds);//为一个key设置过期时间,返回1设置成功。返回0设置失败,失败原因:已有过期时间/更新过期时间/key不存在
  6. Long expireAt(String key, long unixTime) ;//以unix时间戳来设置过期时间
  7. Set<String> keys(String pattern);//适配pattern正则表达式,返回符合规则的keys set集,比如keys(*)就是返回当前db的所有keys,keys集较大的时候慎用,会引起资源问题。要么根据keys的规则分片取,要么存储一个keys的索引
  8. boolean jedis.exists(String key);//判断当前db中有没有这个key
  9. Long dbSize();//返回当前db中key的数目
  10. String flushDB();//清空当前db,返回状态码
  11. String flushAll();//清空整个redis,不限db的,慎用。返回状态码
  12. jedis.close();//关闭连接

String的操作

String set(String key, String value);//往选中的db中加入数据,如果已有key则覆盖。返回状态码
String get(String key);//取出一个key对应的value
long del(String... keys);//删除keys-values,如果删除成功返回大于0的数,如果没有这个值则返回0

hash操作

hget(String key, String field) //返回对应value值 
hset(String key, String field, String value) //在redis中插入一个key,它对应一个map
boolean hexists(String key, String field)//判断map中是否存在该field
Map<String, String> hgetAll(String key)//获取整个map
hdel(String key, String field)//从map中删除该键
hkeys(String key)//获取该map全部的field
hvals(String key)//获取该map全部的value
hlen(String key)//返回该map的size

list操作 (类似于队列)

lpush(String key, String... values)//向队列头部插入数据
rpush(String key, String... values)//向队列尾部插入数据
lpop(String key)//从头部出队列
rpop(String key)//从尾部出队列
lset(String key, long index, String value)//
lrem(String key, long count, String value)//从queue中移除count个数据,正数从头部移除,负数从尾部移除,0表示移除全部

set操作

sadd(String key, String... members) //向set中添加一个member,使用该操作会在redisdb中插入一个key,它对应的value是一个set集合
Set<String> smembers(key) //返回set中的全部members
srem(String key, String... members) //移除set中的members
String spop(String key) //随机移除并返回set中的一个member

sorted set 操作

zadd(String key,double socre,String member); //增加一个元素,同时指定其分值
Set set = jedis.zrange(String key,long start,long end); // 按排名查出指定范围的内容
//这里的set是redis实现的SetFromList,继承自javaapi的AbstractSet。  该set是有序的

实际操作,及数值的计算

jedis给每种类型都提供了数值计算的方法
incr decr
increase /ɪn’kriːs/ 增加 decrease /dɪ’kriːs/ 减少
https://blog.csdn.net/qq_42570601/article/details/99649214

package com.realrainy.oa;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

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

public class RedisTest {

    Jedis je = new Jedis("127.0.0.1", 6379);
//    je.auth("password");

    public static void main(String[] args) {
        RedisTest rt = new RedisTest();
//        rt.rSting();
//        rt.rHash();
//        rt.rList();
//        rt.rSet();
        rt.rSSet();

    }

    public void rSting() {
        // 赋值
        je.set("name", "huangqiqi");
        je.set("username", "huangqiqi");
        je.set("password", "123");
        // 删除
        je.del("name");
        System.out.println(je.get("name"));
        System.out.println(je.get("username"));
        // 自减
        je.decr("password");
        System.out.println(je.get("password"));
        // 增减指定量
        je.incrBy("password", 3);
        System.out.println(je.get("password"));
        // 连接
        je.append("username", "如果没有串,我就自己创建!");
        System.out.println(je.get("username"));
    }

    public void rHash() {
        // 单个赋值
        je.hset("用户表1", "username", "huangqiqi");
        System.out.println(je.hget("用户表1", "username"));
        // 多个赋值
        Map<String, String> map = new HashMap<>();
        map.put("username", "huangqiqi");
        map.put("password", "123");
        je.hmset("用户表2", map);
        System.out.println(je.hmget("用户表2", "username", "password"));
        // 增加数字
        je.hset("用户表1", "age", "23");
        je.hincrBy("用户表1", "age", 2);
        System.out.println(je.hget("用户表1", "age"));
        // 判断字段是否存在
        boolean fiag1 = je.hexists("用户表1", "username");
        boolean fiag2 = je.hexists("用户表1", "password");
        System.out.println(fiag1 + "\t" + fiag2);
        // 获取长度
        System.out.println(je.hlen("用户表1"));
        // 获取所有属性名称
        Set<String> sets = je.hkeys("用户表2");
        for (String str : sets) {
            System.out.println(str);
        }
        // 获取所有属性的值
        List<String> list = je.hvals("用户表1");
        for (String str : list) {
            System.out.println(str);
        }
    }

    public void rList() {
        // 从左边开始添加
        je.lpush("list1", "1", "2", "3");
        je.lpush("list1", "a", "b", "c");
        // 从第1个开始(坐标为0)到倒数第一个(坐标为-1) 也就是最后一个 也就是 所有数据
        System.out.println("list1:" + je.lrange("list1", 0, -1));

        // 从右边开始开始添加,一般人都习惯这种思维
        je.rpush("list2", "1", "2", "3");
        je.rpush("list2", "a", "b", "c");
        System.out.println("list2:" + je.lrange("list2", 0, -1));

        // 从左侧弹出集合元素,并删除该元素
        System.out.println(je.lpop("list1"));
        // 从右侧弹出集合元素,并删除该元素
        System.out.println(je.rpop("list2"));

        // 删除
        je.del("list1");
        je.del("list2");
    }

    public void rSet() {
        // 添加和获取
        je.sadd("set1", "a", "b", "c");
        je.sadd("set1", "a", "d", "e");
        System.out.println("不会出现重复元素:" + je.smembers("set1"));

        // 删除元素
        je.srem("set1", "d", "e");
        System.out.println("删除掉两个元素后:" + je.smembers("set1"));

        // 判断某个元素是否存在
        boolean flag = je.sismember("set1", "a");
        System.out.println(flag);

        /*
         * 计算差、交、并集
         */
        je.sadd("set2", "a", "b", "c");
        je.sadd("set3", "b", "c", "d");
        System.out.println("set2:" + je.smembers("set2"));
        System.out.println("set3:" + je.smembers("set3"));

        // 差集: je.sdiff("set2","set3") 结果返回set2有但是set3没有的元素
        Set<String> set1 = je.sdiff("set2", "set3");
        System.out.println("差集:");
        for (String set : set1) {
            System.out.print(set + "\t");
        }

        // 交集
        Set<String> set2 = je.sinter("set2", "set3");
        System.out.println("\n交集:");
        for (String set : set2) {
            System.out.print(set + "\t");
        }

        // 并集
        Set<String> sets3 = je.sunion("set2", "set3");
        System.out.println("\n并集");
        for (String set : sets3) {
            System.out.print(set + "\t");
        }

        // 计算元素总数
        System.out.println("\nset1的元素总数:" + je.scard("set1"));

        // 随机获取一个元素
        String rand = je.srandmember("set1");
        System.out.println("随机获取一个元素:" + rand);
    }

    public void rSSet() {
        // 添加集合期末成绩 元素是平时分,考试,作业 评分分别是80,10,10
        je.zadd("期末成绩", 80, "平时分");
        je.zadd("期末成绩", 10, "考试");
        je.zadd("期末成绩", 10, "作业");

        // 获得元素
        Set<Tuple> sets = je.zrangeWithScores("期末成绩", 0, -1);
        for (Tuple t : sets) {
            System.out.println(t.getElement() + "\t" + t.getScore());
        }

        System.out.println("删除得分在70~90分的元素");
        // 删除元素
        je.zremrangeByScore("期末成绩", 70, 90);

        Set<Tuple> sets2 = je.zrangeWithScores("期末成绩", 0, -1);
        for (Tuple t : sets2) {
            System.out.println(t.getElement() + "\t" + t.getScore());
        }
    }
}