Jedis和SpringDataRedis

目录

Jedis

SpringDataRedis

第一步:创建SpringBoot项目

第二步:导入依赖

第三步:通过application.yml来配置redis

应用

SpringDataRedis操作string类型,通过RedisTemplate模板对象来获取ValueOperations对象来操作String类型

SpringDataRedis操作hash类型 

SpringDataRedis操作list类型

SpringDataRedis操作set数据类型

SpringDataRedis操作zset数据类型 

SpringDataRedis操作通用命令

使用redis连接池

1.导入依赖

2.编写application.yml配置文件

Redis持久化


Jedis

jedis属于java技术的客户端操作redis客户端

使用第一步:导入依赖

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

使用

public class JedisTest {
    @Test
    public void test(){
        try (Jedis jedis = new Jedis("192.168.230.130", 6379)) {//自动释放资源
            jedis.set("name", "hhh");
            System.out.println(jedis.get("name"));
            jedis.hset("person","name","hhh");
            System.out.println(jedis.keys("*"));
            Map<String, String> person = jedis.hgetAll("person");
            person.forEach((key,value)-> System.out.println(key+"->"+value));
        }
    }
}

SpringDataRedis

第一步:创建SpringBoot项目

第二步:导入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

第三步:通过application.yml来配置redis

spring:
  redis:
    host: 192.168.230.100
    port: 6379
    database: 0  #操作的是0号数据库

应用

SpringDataRedis操作string类型,通过RedisTemplate模板对象来获取ValueOperations对象来操作String类型

@SpringBootTest
class SpringDay9SpringdataRedisApplicationTests {
    //从SpringIoC容器中直接获取
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    void testString(){
        //根据模板对象redisTemplate获取操作String类型的ValueOperations对象
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //1.存数据和取数据
        valueOperations.set("name","hqi");
        Object value = valueOperations.get("name");
        System.out.println("value="+value);

        //2.存值和设置过期时间
        valueOperations.set("address","bj",10, TimeUnit.SECONDS);//存活时间为10秒

        //3.如果key存在就修改原value值,不存在则不执行
        //即存在才执行
        valueOperations.setIfPresent("address","tj");
        //注意:修改value值之后,之前设置的过期时间就会失效

        //4.如果key存在就不会修改原value值,存在则不修改
        //即不存在才执行
        valueOperations.setIfAbsent("name","hhh");
    }

我们可以发现这个键值前面多了一些序列化的东西,所以我们可以自己配置一个RedisTemplate模板对象再交给IoC容器管理 

RedisTemplate模板对象默认的key序列化器为:JdkSerializationRedisSerializer
我们要改成StringRedisSerializer
@Configuration//告诉Spring这是一个配置类,并让Spring加载这个类
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory factory){
        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
        //默认的key序列化器为:JdkSerializationRedisSerializer
        //我们改成StringRedisSerializer
        //键序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //值序列化
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        //key hashMap序列化
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //value hashMap序列化
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        //连接工厂
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }

}

正常:

SpringDataRedis操作hash类型 

    @Test
    void testHash(){
        //根据模板对象RedisTemplate获取HashOperations对象来操作hash数据类型
        HashOperations hashOperations = redisTemplate.opsForHash();
        //1.存储几个hash类型的数据
        //第一个参数是hash的key,第二个参数是hash的字段,第三个参数是字段值
        hashOperations.put("person","name","hhh");
        hashOperations.put("person","age","19");
        
        //2.获取hash类型的某个字段值
        Object value = hashOperations.get("person", "name");
        System.out.println(value);//hhh
        
        //3.根据键获取哈希类型的所有字段
        Set person = hashOperations.keys("person");
        System.out.println(person);//[name, age]
        
        //4.获取hash表中所有字段值
        List person1 = hashOperations.values("person");
        System.out.println(person1);//[hhh, 19]
        
        //5.根据键获取hash类型的所有值
        Map person2 = hashOperations.entries("person");
        person2.forEach((k,v)-> System.out.println(k+"->"+v));
        //name->hhh
        //age->19
    }

 

SpringDataRedis操作list类型

    @Test
    void testList(){
        //根据RedisTemplate模板对象获取ListOperations来操作list数据类型
        ListOperations listOperations = redisTemplate.opsForList();
        //1.向列表中添加数据
        listOperations.leftPush("list","a");
        listOperations.leftPush("list","b");
        listOperations.leftPushAll("list","c","d");//批量添加
        listOperations.rightPush("list","1");
        listOperations.rightPush("list","2");
        //2.查看list数据类型的所有值
        List list = listOperations.range("list", 0, -1);
        for (Object object : list) {
            System.out.println("value="+object);
            //value=d
            //value=c
            //value=b
            //value=a
            //value=1
            //value=2
        }
    }

SpringDataRedis操作set数据类型

@Test
    void testSet(){
        //根据RedisTemplate模板对象来获取SetOperations来操作set数据类型
        SetOperations setOperations = redisTemplate.opsForSet();
        //1.向set集合中添加数据
        setOperations.add("set","a","b","c","1","a","2");//set集合会去重,无序
        //2.获取set集合的所有值
        Set set = setOperations.members("set");
        for (Object o : set) {
            System.out.println("value="+o);
            //value=a
            //value=1
            //value=b
            //value=c
            //value=2
        }
        //3.删除指定set集合中的值
        setOperations.remove("set","a","b");
    }

 

SpringDataRedis操作zset数据类型 

      @Test
    void testZSet(){
        //根据RedisTemplate模板对象获取ZSetOperations来操作ZSet数据类型
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //1.向zSet中添加数据
        zSetOperations.add("zset","hhh",90);
        zSetOperations.add("zset","aaa",70);
        zSetOperations.add("zset","bbb",80);
        //2.从zSet中取数据
        Set zset = zSetOperations.range("zset", 0, -1);
        for (Object o : zset) {
            System.out.println("value="+o);
            //value=aaa
            //value=bbb
            //value=hhh
        }
        //3.对某个值的分数加10
        zSetOperations.incrementScore("zset","hhh",10);
        //4.获取zset集合中分数和value值
        Set<ZSetOperations.TypedTuple> set = zSetOperations.rangeWithScores("zset", 0, -1);
        for (ZSetOperations.TypedTuple tuple : set) {
            System.out.println(tuple.getValue()+"->"+tuple.getScore());
            //aaa->70.0
            //bbb->80.0
            //hhh->100.0
        }
        //5.删除数据
        zSetOperations.remove("zset","aaa","bbb");
    }

SpringDataRedis操作通用命令

    @Test
    void testCommon(){
        //1.获取redis中所有key
        Set keys = redisTemplate.keys("*");
        for (Object key : keys) {
            System.out.println("key="+key);
            //key=zset
            //key=set
            //key=list
            //key=person
        }
        //2.判断某个key是否存在
        System.out.println(redisTemplate.hasKey("set"));//true
        //3.删除某个key
        System.out.println(redisTemplate.delete("set"));//true
        //4.获取指定key的数据类型
        System.out.println(redisTemplate.type("list"));//LIST

    }

使用redis连接池

1.导入依赖

<!--        redis创建连接池,默认不会创建-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

2.编写application.yml配置文件

spring:
  redis:
    host: 192.168.230.130
    port: 6379
    database: 0  #操作的是0号数据库
    lettuce:
      pool:
        max-active: 8 #连接池最大连接数(使用负数表示没有限制连接个数)
        max-wait: -1ms #连接池最大阻塞等待时间(使用负数表示没有限制时间)
        max-idle: 8 #连接池中的最大空闲连接
        min-idle: 1 #连接池中最小空闲连接

Redis持久化

把redis服务器关了之后,再重启服务器,数据库数据会部分丢失因为redis服务器会每隔一段时间写入一次内存中数据到硬盘上

所以我们要让redis持久化,即把内存中的数据保存到硬盘上

redis持久化的两种方式

1.ROB:redis database 默认的持久化方式,以二进制的方式将数据写入文件中。每隔一段时间写一次。(效率高,但是突然关闭服务器会导致部分数据丢失)

2.AOF:Append Only File 以文本文件的方式记录用户的每次操作,数据还原时候,读取AOF文件,模拟用户的操作,将数据还原率低,但是不会有数据丢失)

要把redis持久化方法改成AOF,只需要把redis.conf文件的appendonly修改为yes即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

落落落sss

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

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

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

打赏作者

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

抵扣说明:

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

余额充值