七天玩转Redis | 第5天 Java操作Redis

这篇博客介绍了在Java中操作Redis的三种方式:Jedis、RedisTemplate和StringRedisTemplate。Jedis是官方推荐的客户端,RedisTemplate是SpringDataRedis的封装,提供自动管理连接池和数据类型操作。StringRedisTemplate专门处理字符串数据,适用于简单的字符串场景。文章总结了各工具类的适用场景,帮助读者理解如何根据项目需求选择合适的Redis操作工具。
摘要由CSDN通过智能技术生成

Redis最多的时候也是和Java语言整合操作,所以我们采用Java语言来实践操作Redis。
开发环境是JDK1.8,IDEA2020.3版本

一、Jedis类详解

Java中想要操一、Jedis类详解作Redis,最基本的一个类是jedis类
1.导入jar包
jedis类驱动jar包
Redis数据操作
Jedis类中数据的操作方法基本上和命令是同名的,返回值类型也是一样的,我们直接调用即可,例举一个常见的操作作为示例,其他直接调用即可!

    public static void main(String[] args) throws InterruptedException {
//        新建Jedis类对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
//       测试Redis连接
        System.out.println("redis连接测试:" + jedis.ping());
//        判断某个键是否存在
        System.out.println("判断某个键是否存在:" + jedis.exists("mykey"));
//        获取所有的键
        Set<String> keys = jedis.keys("*");
        System.out.println(keys);
 
//        根据key去删除键值对
        System.out.println("删除键" + jedis.del("mykey"));
 
 
        /**
         * String类型
         */
//        设置一个键值对
        jedis.set("mykey1", "myValue1");
        jedis.set("mykey2", "myValue2");
        jedis.set("mykey3", "myValue3");
//        根据索引获取一个数据的值
        System.out.println("得到的数值为:" + jedis.get("mykey2"));
        System.out.println("获取多个键值对:" + jedis.mget("mykey1", "mykey2", "mykey3"));
        System.out.println("获取mykey1的数据的长度:" + jedis.strlen("mykey1"));
        System.out.println("返回key中字符串值的子串:" + jedis.getrange("mykey2", 1, 5));
        System.out.println("字符串追加:" + jedis.append("mykey3", "hello"));
        System.out.println("获取到mykey3的值:" + jedis.get("mykey3"));
 
        /**
         * Hash类型
         */
//        设置一个Hash数据
        Map<String, String> valueMap = new HashMap<>();
        valueMap.put("name", "huixiaoyuan");
        valueMap.put("sex", "男");
        valueMap.put("age", "3");
        System.out.println("设置一个Hash数据" + jedis.hmset("myHash", valueMap));
        System.out.println("获取指定哈希表中所有的字段和值:" + jedis.hgetAll("myHash"));
        System.out.println("获取存储在哈希表中指定字段的值:" + jedis.hget("myHash", "name"));
        System.out.println("删除一个或多个哈希表字段:" + jedis.hdel("myHash", "sex"));
        System.out.println("获取哈希表中字段的数量:" + jedis.hlen("myHash"));
 
        /**
         * List类型
         */
        System.out.println("将一个或多个元素插入列表表头:" + jedis.lpush("myList", "l1", "l2", "l3"));
        System.out.println("将一个或多个元素插入列表尾部:" + jedis.rpush("myList", "l4"));
        System.out.println("获取列表长度:" + jedis.llen("myList"));
        System.out.println("通过索引获取列表中的元素:" + jedis.lindex("myList", 2));
        System.out.println("移除并获取列表第一个元素:" + jedis.lpop("myList"));
        System.out.println("移除并获取列表最后一个元素:" + jedis.rpop("myList"));
 
 
        /**
         * Hash类型
         */
        System.out.println("设置一个Hash数据" + jedis.hmset("myHash", valueMap));
        System.out.println("获取指定哈希表中所有的字段和值:" + jedis.hgetAll("myHash"));
        System.out.println("获取存储在哈希表中指定字段的值:" + jedis.hget("myHash", "name"));
        System.out.println("删除一个或多个哈希表字段:" + jedis.hdel("myHash", "sex"));
        System.out.println("获取哈希表中字段的数量:" + jedis.hlen("myHash"));
 
        /**
         * Set类型
         */
        System.out.println("向集合中添加一个或多个成员:" + jedis.sadd("mySet","s1","s2","s3"));
        System.out.println("向集合中添加一个或多个成员:" + jedis.sadd("mySet2","s3","s4","s5"));
        System.out.println("获取集合中成员的个数:" + jedis.scard("mySet"));
        System.out.println("返回第一个集合与其他集合之间的差异:" + jedis.sdiff("mySet","mySet2"));
        System.out.println("返回集合中的所有元素:" + jedis.smembers("mySet"));
 
 
        /**
         *ZSet类型
         */
        System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",1,"m1"));
        System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",2,"m2"));
        System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",3,"m3"));
        System.out.println("获取有序集合的成员数:" + jedis.zcard("myZset"));
        System.out.println("计算有序集合中指定区间分数的成员数:" + jedis.zcount("myZset",0,2));
        System.out.println("移除有序集合中的一个或多个元素:" + jedis.zrem("myZset","m2"));
 
    }

在这里插入图片描述

二、RedisTempate类详解

RedisTempate类也是在Java中操作Redis的常用类,但是使用Jedis类和使用RedisTempate类有什么不同呢?

首先,Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring系列框架进行搭配使用,

所以Jedis一般可以用于没有使用spring系列框架的场景,而RedisTempate则多用于企业利用框架的实际开发中。
下载RedisTempate驱动
RedisTempate类使用:
RedisTemplate提供了五种操作数据类型的方法,分别对应了Redis的五种数据类型
redisTemplate.opsForValue(); 对应String类型操作
redisTemplate.opsForHash(); 对应Hash类型操作
redisTemplate.opsForList(); 对应List类型操作
redisTemplate.opsForSet(); 对应Set类型操作
redisTemplate.opsForZSet(); 对应ZSet类型操作

以redisTemplate.opsForValue(); 操作String类型为例,在Redis中增加一个键值对

        ValueOperations valueOperations = redisTemplate.opsForValue();
//        设置键值对
        valueOperations.set("mykey","value1");
//        根据索引获取值
        valueOperations.get("myKey");

三、StringRedisTemplate类详解

可以使用RedisTemplate来操作Redis,但是还有一个相似的类StringRedisTemplate也是比较常用的,主要用于操作字符串类型数据。
RedisTemplate和StringRedisTemplate区别:
StringRedisTemplate继承自RedisTemplate。
两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
当你的redis数据库里面本来存的就是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。

但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
StringRedisTemplate对应了操作五种数据类型的方法,而且操作和stringRedis一样
stringRedisTemplate.opsForValue(); 对应String类型操作
stringRedisTemplate.opsForHash(); 对应Hash类型操作
stringRedisTemplate.opsForList(); 对应List类型操作
stringRedisTemplate.opsForSet(); 对应Set类型操作
stringRedisTemplate.opsForZSet(); 对应ZSet类型操作

总结:

今天主要学习了在Java中如何去操作Redis,总结一下三种工具类的使用场景;
Jedis适合在没有spring系列框架的普通Java工程中使用
RedisTemplate适合在多种数据类型的项目,且希望自动进行数据转换的情况下使用
StringRedisTemplate适合在只有字符串处理的情况下使用
本文是学习文章,大部分内容来源于灰小猿大佬的博客。
灰小猿大佬博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mzldustu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值