redis的五种基本类型和业务场景和使用方式-kb88凯时官网登录

时间:2024-10-18
阅读:
免费资源网,https://freexyz.cn/

redis是什么?

redis是非关系性数据库,redis 是一个开源的高性能键值数据库,主要用于数据存储和缓存。

它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。

redis的特点

  1. 丰富的数据类型‌:redis不仅支持字符串类型的键值对,还支持列表、哈希、集合和有序集合等多种数据结构,这使得redis能够处理更复杂的数据操作‌23。
  2. 高性能‌:由于数据存储在内存中,redis能够提供极高的读写速度,适用于需要高速响应的场景‌12。
  3. 持久化功能‌:redis支持将内存中的数据周期性地写入磁盘,确保数据的安全性,同时也支持将修改操作写入追加的记录文件,实现主从同步‌14。
  4. 可扩展性‌:redis提供了丰富的api和脚本功能,支持通过lua脚本批量执行命令,同时也支持水平扩展,类似于分库分表

依赖


    org.springframework.boot
    spring-boot-starter-data-redis


    redis.clients
    jedis


     org.springframework.boot
     spring-boot-starter-test
     test
  

      org.junit.jupiter
      junit-jupiter-api
      5.8.2
      test


      org.junit.jupiter
      junit-jupiter-engine
      5.8.2
      test

配置

spring:
  redis:
    host: 你的ip
    port: 6379

redis的配置类(用于格式转换,处理乱码)

package com.bwie.common.config;
import com.fasterxml.jackson.annotation.jsonautodetect;
import com.fasterxml.jackson.annotation.propertyaccessor;
import com.fasterxml.jackson.databind.objectmapper;
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.jackson2jsonredisserializer;
import org.springframework.data.redis.serializer.stringredisserializer;
@configuration
public class redisconfig {
    @bean
    public redistemplate redistemplate(redisconnectionfactory factory) {
        redistemplate template = new redistemplate<>();
        template.setconnectionfactory(factory);
        jackson2jsonredisserializer jackson2jsonredisserializer = new
                jackson2jsonredisserializer(object.class);
        objectmapper om = new objectmapper();
        om.setvisibility(propertyaccessor.all, jsonautodetect.visibility.any);
        om.enabledefaulttyping(objectmapper.defaulttyping.non_final);
        jackson2jsonredisserializer.setobjectmapper(om);
        stringredisserializer stringredisserializer = new stringredisserializer();
        // key采用string的序列化方式
        template.setkeyserializer(stringredisserializer);
        // hash的key也采用string的序列化方式
        template.sethashkeyserializer(stringredisserializer);
        // value序列化方式采用jackson
        template.setvalueserializer(jackson2jsonredisserializer);
        // hash的value序列化方式采用jackson
        template.sethashvalueserializer(jackson2jsonredisserializer);
        template.afterpropertiesset();
        return template;
    }
}

string(字符串)

特点

  • 最基本的数据类型,可以包含任何类型的数据,比如整数、浮点数或者字符串。
  • 最大存储容量为 512mb。

业务场景

  • 缓存: 存储临时数据,如用户会话信息或页面缓存。
  • 计数器: 可以用来实现访问计数器、点赞数等自增功能。
  • 配置存储: 存储应用程序的配置参数。

代码使用案例

import org.junit.jupiter.api.test;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.data.redis.core.redistemplate;
import static org.junit.jupiter.api.assertions.assertequals;
@springboottest
public class stringexampletest {
    @autowired
    private redistemplate redistemplate;
    @test
    public void teststring() {
        // 设置字符串值
        redistemplate.opsforvalue().set("mystringkey", "hello redis!");
        // 获取并验证字符串值
        string value = (string) redistemplate.opsforvalue().get("mystringkey");
        assertequals("hello redis!", value);  // 验证值是否正确
        // 更新字符串值
        redistemplate.opsforvalue().set("mystringkey", "updated value");
        assertequals("updated value", redistemplate.opsforvalue().get("mystringkey"));  // 验证更新后的值
        // 增加计数器值
        redistemplate.opsforvalue().increment("mycounter", 1);
        assertequals(1, redistemplate.opsforvalue().get("mycounter"));  // 验证计数器值
        // 设置带有过期时间的字符串
        redistemplate.opsforvalue().set("tempkey", "i will expire soon", 10);
        // 验证过期时间是否小于10秒(实际过期时间可能略小于10秒)
        assertequals(true, redistemplate.getexpire("tempkey") < 10l);
    }
}

注意:

  • 如果说注入的时候泛型和配置类不一样的话,可能会导致使用不了配置类的相关配置,就会采用redistemplate原有的配置,然后存储到的redis的数据就是一些乱码。
  • 一定要保证注入的泛型和配置类一样,这样存储到redis中的数据格式就是正确的

list(列表)

特点

  • 是一个链表结构,可以包含多个字符串值(元素)。
  • 可以在列表的两端进行插入(push)和删除(pop)操作,支持对列表进行修剪(trim)以保留指定范围的元素。

业务场景

  • 消息队列:通过列表实现生产者/消费者模式。
  • 时间线:存储用户的活动日志或社交媒体的时间线。
  • 任务调度:存储待处理任务的队列。

代码使用案例

import org.junit.jupiter.api.test;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.data.redis.core.redistemplate;
import java.util.list;
import static org.junit.jupiter.api.assertions.assertequals;
@springboottest
public class listexampletest {
    @autowired
    private redistemplate redistemplate;
    @test
    public void testlist() {
        // 向列表中添加元素
        redistemplate.opsforlist().leftpush("mylistkey", "item1");
        redistemplate.opsforlist().leftpush("mylistkey", "item2");
        // 获取并验证列表中的所有元素
        list
网站地图