在Java中操作Redis

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 在Java中操作Redis

使用Jedis操作Redis

redis的java客户端很多,官方推荐的有三种:

Jedis

Lettuce

Redisson

Spring 对Redis 客户端进行了整合,提供了Spring Date Redis ,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis

使用Jedis操作Redis的步骤

1.获取链接

2.执行操作

3.关闭连接

package com.example.demotest;
 
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;
 
import java.util.Set;
 
/**
 * 使用Jedis操作Redis
 */
public class JedisTest {
 
    @Test
    public void testRedis(){
        //1.获取连接
        Jedis jedis = new Jedis("localhost",6379);
 
        //2.执行具体的操作
        jedis.set("username","huan");
        String username = jedis.get("username");
        System.out.println(username);
 
        //jedis.del("username");
        jedis.hset("myhash","addr","sz");
        String hValue = jedis.hget("myhash", "addr");
        System.out.println(hValue);
 
        Set<String> keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }
        //3.关闭连接
        jedis.close();
    }
}

使用Spring Data Redis来简化Redis操作

Spring Data Redis 中提供了一个高度封装的类,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

ValueOperations:简单K-V操作

SetOperations :set 类型数据操作

ZSetOperations:zset 类型数据操作

HashOperations:针对map类型的数据操作

ListOperations:针对list类型的数据操作

默认操作的是0号数据库,也可以切换其他数据库

设置一下序列化,这样设置key的时候不会变成乱码

package com.example.demotest;
 
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
 
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
 
        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
 
        redisTemplate.setKeySerializer(new StringRedisSerializer());
 
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
 
        redisTemplate.setConnectionFactory(connectionFactory);
        return  redisTemplate;
    }
}
package com.example.demotest;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;
 
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
 
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void testString(){
        redisTemplate.opsForValue().set("city2","sz");
        String city2 = (String) redisTemplate.opsForValue().get("city2");
        System.out.println("打印一下" + city2);
        //指定过期时间 10 秒
        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
        //如果不存在key则设置
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "sz");
        System.out.println(aBoolean);
 
    }
 
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        //存值
        hashOperations.put("002","name","hh");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","sz");
        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);
 
        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }
        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
 
 
 
    }
 
    /**
     * 操作list类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
 
        //存储
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");
 
        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }
 
        //获得列表长度
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出队列
            String elment = (String) listOperations.rightPop("mylist");
            System.out.println(elment);
        }
 
 
    }
 
    /**
     * 操作set类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
 
        //存值
        setOperations.add("myset","a","b","c","a");
 
        //取值
        Set<String> myset = setOperations.members("myset");
        for (String s : myset) {
            System.out.println(s);
        }
        //删除成员
        setOperations.remove("myset","a","b");
 
        //取值
        myset = setOperations.members("myset");
        for (String s : myset) {
            System.out.println(s);
        }
 
    }
 
    /**
     * 操作zset类型的数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
 
        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","d",12.0);
        zSetOperations.add("myZset","a",13.0);
 
        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);
 
        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        //删除成员
        zSetOperations.remove("myZset","a","b");
 
 
    }
 
    @Test
    public void testCommon(){
        //获取Redis 中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }
 
        //判断某个key是否存在
        Boolean hh = redisTemplate.hasKey("hh");
        System.out.println(hh);
 
        //删除指定key
        redisTemplate.delete("myzset");
 
        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());
 
    }
}


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4天前
|
缓存 NoSQL Java
Java高并发实战:利用线程池和Redis实现高效数据入库
Java高并发实战:利用线程池和Redis实现高效数据入库
20 0
|
4天前
|
存储 消息中间件 NoSQL
使用 Java 操作 Redis 数据类型的详解指南
使用 Java 操作 Redis 数据类型的详解指南
5 0
|
5天前
|
NoSQL 测试技术 Scala
java.lang.RuntimeException: Can‘t start redis server. Check logs for details.
java.lang.RuntimeException: Can‘t start redis server. Check logs for details.
8 1
|
5天前
|
存储 缓存 Java
滚雪球学Java(59):从基础到高阶:Java中LinkedList的操作指南
【6月更文挑战第13天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
11 1
滚雪球学Java(59):从基础到高阶:Java中LinkedList的操作指南
|
5天前
|
Java 大数据 API
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
35 0
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
|
6天前
|
JSON Java 网络架构
【elastic search】JAVA操作elastic search
【elastic search】JAVA操作elastic search
7 1
|
NoSQL Java Redis
|
25天前
|
NoSQL Linux Redis
Redis -- 安装客户端redis-plus-plus
Redis -- 安装客户端redis-plus-plus
48 0
|
1月前
|
NoSQL Linux 网络安全
Linux安装Redis(详细教程)
Linux安装Redis(详细教程)
94 2
|
2天前
|
消息中间件 缓存 NoSQL
Redis单实例安装
Redis单实例安装
12 1