Java操作Redis数据类型

一)Java连接Redis准备

第一步:需安装Redis服务和Java Redis驱动包。

Java Redis驱动包下载地址:https://mvnrepository.com/artifact/redis.clients/jedis

 

第二步:创建一个Maven项目,并在pom.xml文件中引入jedis驱动包。

pom.xml:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>

 

二)连接Redis

方式一:默认连接"localhost"和"6379"端口

Jedis def1 = new Jedis();

 

方式二:指定连接host, 默认连接6379端口

Jedis def2 = new Jedis("localhost");

 

方式三:指定连接host和port

Jedis def3 = new Jedis("localhost", 6379);

 

方式四:通过HostAndPort类指定host和port

HostAndPort hap = new HostAndPort("localhost", 6379);
Jedis def4 = new Jedis(hap);

 

其它方式可见redis.clients.jedis.Jedis中的源码。

package com.oysept.redis;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;

public class RedisConnection {

    public static void main(String[] args) {
        // 方式一: 默认连接"localhost"和"6379"端口
        Jedis def1 = new Jedis();
        System.out.println("ping redis连接,应返回PONG, 实际返回值: " + def1.ping());
		
        // 方式二: 指定连接host, 默认连接6379端口
        Jedis def2 = new Jedis("localhost");
		
        // 方式三: 指定连接host和port
        Jedis def3 = new Jedis("localhost", 6379);
		
        // 方式四: 通过HostAndPort类指定host和port
        HostAndPort hap = new HostAndPort("localhost", 6379);
        Jedis def4 = new Jedis(hap);
    }
}

 

三)String数据类型

实例:

package com.oysept.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;

public class RedisStringCache {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
     
        // 设置一个字符串, 如果key存在, 覆盖value, 如果key不存在, 新创建一个key value
        // Redis命令: set key value
        jedis.set("myStr", "111");
        System.out.println("set: " + jedis.get("myStr"));
    	
        // 设置一个字符串, 当key存在时, 设置失败, 不存在时, 设置成功
        // Redis命令: set key value nx
        jedis.setnx("myStr", "222");
        System.out.println("setnx: " + jedis.get("myStr"));
    	
        // 设置一个字符串, 并设置过期时间, 时间单位秒
        // Redis命令: set key value [EX seconds]
        jedis.setex("myStr", 60, "333");
        System.out.println("setex: " + jedis.get("myStr") + ", 还有" + jedis.ttl("myStr") + "秒过期!");
    	
        // 设置一个字符串, 指定可选的参数
        // Redis命令: set key value [EX seconds] [PX milliseconds] [NX|XX]
        SetParams params = SetParams.setParams();
        params.ex(600); // 秒
        params.xx(); // 强制覆盖
        jedis.set("myStr", "444", params);
        System.out.println("set SetParams: " + jedis.get("myStr") + ", 还有" + jedis.ttl("myStr") + "秒过期!");
    	
        // 一次性设置多个字符串
        // Redis命令: mset key value [key value ...]
        //            mget key [key ...]
        jedis.mset("key1", "value1", "key2", "value2");
        System.out.println("mset: " + jedis.mget("key1", "key2"));
    	
        // 查询key是否存在
        // Redis命令: exists key [key ...]
        boolean isExists = jedis.exists("myStr");
    	
        // 给字符串重命名, 当key不存在时, 会报错
        // Redis命令: rename key newkey
        //            renamenx key newkey
        jedis.rename("myStr", "newStr");
        jedis.renamenx("newStr", "aaabbb");
    	
        // 设置一个number的元素, 然后再进行累计1
        jedis.set("myNum", "66");
        jedis.incr("myNum");
        System.out.println("incr: " + jedis.get("myNum"));
    }
}

效果图:

 

四)List链表数据类型

实例:

package com.oysept.redis;

import redis.clients.jedis.Jedis;

public class RedisListCache {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
     
        // 删除指定的key, 相当于把整个key在Redis中删除了
        // Redis命令: del key [key ...]
        jedis.del("myList");
    	
        // 设置一个列表, 往列表头部添加元素
        // Redis命令: lpush key value [value ...]
        jedis.lpush("myList", "111", "222", "333");
        System.out.println("lpush: " + jedis.lrange("myList", 0, -1));
    	
        // 设置一个列表, 往列表尾部添加元素
        // Redis命令: rpush key value [value ...]
        jedis.rpush("myList", "AAA", "BBB", "CCC");
        System.out.println("rpush: " + jedis.lrange("myList", 0, -1));
    	
        // 列表长度
        // Redis命令: llen key
        jedis.llen("myList");
    	
        // 指定获取列表区间范围的元素, 其它元素都抛弃掉
        // Redis命令: ltrim key start stop
        jedis.ltrim("myList", 3, 5);
        System.out.println("ltrim: " + jedis.lrange("myList", 0, -1));
    	
        // 重新设置, 指定列表下标的value
        // Redis命令: lset key index value
        jedis.lset("myList", 1, "DDD");
        System.out.println("lset: " + jedis.lrange("myList", 0, -1));
    	
        // 删除指定列表下标的value, 如value不一致, 删除失败
        // Redis命令: lrem key count value
        jedis.lrem("myList", 1, "DDD");
        System.out.println("lrem: " + jedis.lrange("myList", 0, -1));
    	
        // 从列表头部弹出元素
        // Redis命令: lpop key
        jedis.lpop("myList");
        System.out.println("lpop: " + jedis.lrange("myList", 0, -1));
    	
        // 从列表尾部弹出元素
        // Redis命令: rpop key
        jedis.rpop("myList");
        System.out.println("rpop: " + jedis.lrange("myList", 0, -1));
    }
}

效果图:

 

五)Hash数据类型

实例:

package com.oysept.redis;

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

import redis.clients.jedis.Jedis;

public class RedisHashCache {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
     
        // 删除指定的key, 相当于把整个key在Redis中删除了
        // Redis命令: del key [key ...]
        jedis.del("myHash");
    	
        // 设置一个Hash
        // Redis命令: hset key field value
        //            hget key field
        jedis.hset("myHash", "key1", "value1");
        System.out.println("hset: " + jedis.hget("myHash", "key1"));
    	
        // 该方式只能添加一个key value, 当多个key value时, 会报错。原因是hset方法实现问题, hset命令不支持一次性插入多个key value
        final Map<String, String> hset = new HashMap<String, String>();
        hset.put("k1", "v1");
        jedis.hset("myHash", hset);
        System.out.println("hgetAll: " + jedis.hgetAll("myHash"));
    	
        // 一次性设置多个Hash, 当key存在时, 覆盖value
        // Redis命令: hmset key field value [field value ...]
        //            hmget key field [field ...]
        final Map<String, String> hmset = new HashMap<String, String>();
        hmset.put("k1", "vvv111");
        hmset.put("k2", "v2");
        hmset.put("k3", "v3");
        jedis.hmset("myHash", hmset);
        System.out.println("hmset: " +  jedis.hgetAll("myHash"));
    	
        // 判断key中, 某一个字段是否存在
        // Redis命令: hexists key field
        boolean isHexists = jedis.hexists("myHash", "k1");
        System.out.println("hexists: " +  isHexists);
    	
        // 列表长度
        // Redis命令: hlen key
        Long hlen = jedis.hlen("myHash");
        System.out.println("hlen: " +  hlen);
    	
        // 删除指定列表下标的value, 如value不一致, 删除失败
        // Redis命令: hdel key field [field ...]
        jedis.hdel("myHash", "k1", "k3");
        System.out.println("hdel: " +  jedis.hgetAll("myHash"));
    	
        // 获取Hash中所有的key
        // Redis命令: hkeys key
        Set<String> hkeys = jedis.hkeys("myHash");
        System.out.println("hkeys: " +  hkeys);
    	
        // 获取Hash中所有的value
        // Redis命令: hvals key
        List<String> hvals = jedis.hvals("myHash");
        System.out.println("hvals: " +  hvals);
    }
}

效果图:

 

六)Set无序列表数据类型

实例:

package com.oysept.redis;

import redis.clients.jedis.Jedis;

public class RedisSetCache {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
     
        // 删除指定的key, 相当于把整个key在Redis中删除了
        // Redis命令: del key [key ...]
        jedis.del("mySet");
    	
        // 设置一个Set, 往列表中添加元素, 该列表是一个无序的列表
        // Redis命令: sadd key member [member ...]
        //            smembers key
        jedis.sadd("mySet", "111", "222", "333");
        System.out.println("sadd: " + jedis.smembers("mySet"));
    	
        // 删除Set中某个元素
        // Redis命令: srem key member [member ...]
        jedis.srem("mySet", "222");
        System.out.println("srem: " + jedis.smembers("mySet"));
    	
        // 弹出Set中尾部元素, 相当于删除尾部元素
        // Redis命令: srem key member [member ...]
        jedis.spop("mySet");
        System.out.println("spop: " + jedis.smembers("mySet"));
    	
        // 返回Set中元素个数
        // Redis命令: scard key
        Long scard = jedis.scard("mySet");
        System.out.println("scard: " + scard);
    }
}

效果图:

 

七)ZSet有序列表数据类型

实例:

package com.oysept.redis;

import java.util.HashMap;
import java.util.Map;

import redis.clients.jedis.Jedis;

public class RedisZSetCache {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
     
        // 删除指定的key, 相当于把整个key在Redis中删除了
        // Redis命令: del key [key ...]
        jedis.del("myZSet");
    	
        // 设置一个ZSet, 往列表中添加元素, 该列表是一个有序的列表
        // Redis命令: zadd key [NX|XX] [CH] [INCR] score member [score member ...]
        //            zrange key start stop [WITHSCORES]
        Map<String, Double> zadd = new HashMap<String, Double>(); // Map中的元素是无序的
        zadd.put("zadd1", 100D);
        zadd.put("zadd2", 200D);
        zadd.put("zadd3", 300D);
        zadd.put("zadd4", 100D);
        jedis.zadd("myZSet", zadd);
        System.out.println("zadd: " + jedis.zrange("myZSet", 0, -1));
    	
        // 删除ZSet中某个元素
        // Redis命令: zrem key member [member ...]
        jedis.zrem("myZSet", "zadd3");
        System.out.println("zrem: " + jedis.zrange("myZSet", 0, -1));
    	
        // 倒序展示ZSet中的元素
        // Redis命令: zrevrange key start stop [WITHSCORES]
        System.out.println("zrevrange: " + jedis.zrevrange("myZSet", 0, -1));
        System.out.println("zrevrangeWithScores: " + jedis.zrevrangeWithScores("myZSet", 0, -1));
    	
        // 返回ZSet中元素个数
        // Redis命令: zcard key
        Long zcard = jedis.zcard("myZSet");
        System.out.println("zcard: " + zcard);
    }
}

效果图:

 

八)Jedis驱动类中Redis命令枚举

redis.clients.jedis.Protocol类中:

public static enum Command implements ProtocolCommand {
    PING, SET, GET, QUIT, EXISTS, DEL, UNLINK, TYPE, FLUSHDB, KEYS, RANDOMKEY, RENAME, RENAMENX,
    RENAMEX, DBSIZE, EXPIRE, EXPIREAT, TTL, SELECT, MOVE, FLUSHALL, GETSET, MGET, SETNX, SETEX,
    MSET, MSETNX, DECRBY, DECR, INCRBY, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET,
    HINCRBY, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX,
    LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER,
    SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY,
    ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, ZPOPMAX, ZPOPMIN, MULTI, DISCARD, EXEC, WATCH,
    UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE,
    PUBSUB, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE,
    ZINTERSTORE, ZLEXCOUNT, ZRANGEBYLEX, ZREVRANGEBYLEX, ZREMRANGEBYLEX, SAVE, BGSAVE, BGREWRITEAOF,
    LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO,
    LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, BITPOS, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT,
    SLOWLOG, OBJECT, BITCOUNT, BITOP, SENTINEL, DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT,
    PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, SCAN, HSCAN, SSCAN, ZSCAN, WAIT, CLUSTER, ASKING,
    PFADD, PFCOUNT, PFMERGE, READONLY, GEOADD, GEODIST, GEOHASH, GEOPOS, GEORADIUS, GEORADIUS_RO,
    GEORADIUSBYMEMBER, GEORADIUSBYMEMBER_RO, MODULE, BITFIELD, HSTRLEN, TOUCH, SWAPDB, MEMORY,
    XADD, XLEN, XDEL, XTRIM, XRANGE, XREVRANGE, XREAD, XACK, XGROUP, XREADGROUP, XPENDING, XCLAIM,
    ACL, XINFO, BITFIELD_RO;

    private final byte[] raw;

    Command() {
        raw = SafeEncoder.encode(this.name());
    }

    @Override
    public byte[] getRaw() {
        return raw;
    }
}

 

识别二维码关注个人微信公众号

本章完结,待续,欢迎转载!
 
本文说明:该文章属于原创,如需转载,请标明文章转载来源!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值