Redis简单使用

1、简介

        Redis是一个基于**内存**的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件

        官网:https://redis.io
        中文网:https://www.redis.net.cn/
        key-value结构存储:

        主要特点:

  • 基于内存存储,读写性能高  
  • 适合存储热点数据(热点商品、资讯、新闻)
  • 企业应用广泛

        Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

        NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

        关系型数据库(RDBMS):

  • Mysql

  • Oracle

  • DB2

  • SQLServer

        非关系型数据库(NoSql):

  • Redis

  • Mongo db

  • MemCached

2、下载安装启动
        下载Redis安装包分为windows版和Linux版:
         安装

        Redis的Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:

        在Linux系统安装Redis步骤:

        1. 将Redis安装包上传到Linux

        2. 解压安装包,命令:tar -zxvf redis-4.0.0.tar.gz -C /usr/local

        3. 安装Redis的依赖环境gcc,命令:yum install gcc-c++

        4. 进入/usr/local/redis-4.0.0,进行编译,命令:make

        5. 进入redis的src目录进行安装,命令:make install

        启动

        以window版Redis进行演示(注意在安装目录下cmd):

redis-server.exe redis.windows.conf

        Redis服务默认端口号为 6379 ,通过快捷键Ctrl + C 即可停止Redis服务;当Redis服务启动成功后,可通过客户端进行连接(任意cmd窗口):

redis-cli.exe

        3、Redis数据类型

        五种常用数据类型介绍:Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

  • 字符串 string

  • 哈希 hash

  • 列表 list

  • 集合 set

  • 有序集合 sorted set / zset

解释说明:

  • 字符串(string):普通字符串,Redis中最简单的数据类型

  • 哈希(hash):也叫散列,类似于Java中的HashMap结构

  • 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList

  • 集合(set):无序集合,没有重复元素,类似于Java中的HashSet

  • 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

        4、常用命令

        可以参考Redis中文网:Redis中文网

        5、在Java中使用Redis
        5.1、添加依赖
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
        5.2、配置Redis数据源

        在.yml中添加:

spring:
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 10

        编写配置类,创建RedisTemplate对象:

        当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为StringRedisSerializer序列化器。

package com.sky.config;

import lombok.extern.slf4j.Slf4j;
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
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

        通过RedisTemplate对象操作Redis

package com.sky.test;

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.*;

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        //string数据操作
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //hash类型的数据操作
        HashOperations hashOperations = redisTemplate.opsForHash();
        //list类型的数据操作
        ListOperations listOperations = redisTemplate.opsForList();
        //set类型数据操作
        SetOperations setOperations = redisTemplate.opsForSet();
        //zset类型数据操作
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }
}
        5.3、操作常见类型数据
  • 操作字符串类型数据
	/**
     * 操作字符串类型的数据
     */
    @Test
    public void testString(){
        // 设置字符串键值对
        redisTemplate.opsForValue().set("name","小明");

        // 获取字符串对应的值
        String city = (String) redisTemplate.opsForValue().get("name");
        System.out.println(city);

        // 设置带有过期时间的字符串键值对
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);

        // 当健不存在时设置字符串键值对
        redisTemplate.opsForValue().setIfAbsent("lock","1");

        // 当键已存在时设置字符串键值对,但不覆盖已有的值 
        redisTemplate.opsForValue().setIfAbsent("lock","2");
    }
  • 操作哈希类型数据
/**
     * 操作哈希类型的数据
     */
    @Test
    public void testHash(){
        // 获取操作哈希的实例
        HashOperations hashOperations = redisTemplate.opsForHash();

        // 向哈希表中设置字段和值  key-value
        hashOperations.put("100","name","tom");
        hashOperations.put("100","age","20");

        // 获取哈希表中指定字段的值
        String name = (String) hashOperations.get("100", "name");
        System.out.println(name);

        // 获取哈希表中所有字段名
        Set keys = hashOperations.keys("100");
        System.out.println(keys);

        // 获取哈希表中所有值
        List values = hashOperations.values("100");
        System.out.println(values);

        // 从哈希表中删除指定字段
        hashOperations.delete("100","age");
    }
  • 操作列表类型数据
	/**
     * 操作列表类型的数据
     */
    @Test
    public void testList(){

        // 获取操作列表的实例
        ListOperations listOperations = redisTemplate.opsForList();

        // 向列表的左侧添加多个元素
        listOperations.leftPushAll("mylist","a","b","c");
        
        // 向列表的右侧添加一个元素
        listOperations.leftPush("mylist","d");

        // 获取列表中所有元素
        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println(mylist);

        // 从列表的右侧弹出一个元素
        listOperations.rightPop("mylist");

        // 获取列表的大小
        Long size = listOperations.size("mylist");
        System.out.println(size);
    }
  • 操作集合类型数据
/**
     * 操作集合类型的数据
     */
    @Test
    public void testSet(){
        // 获取操作集合的实例 
        SetOperations setOperations = redisTemplate.opsForSet();

        // 向集合中添加元素
        setOperations.add("set1","a","b","c","d");
        setOperations.add("set2","a","b","x","y");

        // 获取集合中的所有成员
        Set members = setOperations.members("set1");
        System.out.println(members);

        // 获取集合的大小
        Long size = setOperations.size("set1");
        System.out.println(size);

        // 求两个集合的交集
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);

        // 求两个集合的并集
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);

        // 从集合中移除指定的元素
        setOperations.remove("set1","a","b");
    }
  • 操作有序集合类型数据
/**
     * 操作有序集合类型的数据
     */
    @Test
    public void testZset(){
        // 获取操作有序集合的实例
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        // 添加元素到有序集合中
        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",12);
        zSetOperations.add("zset1","c",9);

        //  获取有序集合中的元素范围
        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);

        // 增加有序集合中元素的分值
        zSetOperations.incrementScore("zset1","c",10);

        // 从有序集合中移除元素
        zSetOperations.remove("zset1","a","b");
    }
  •  通用的操作命令
	/**
     * 通用命令操作
     */
    @Test
    public void testCommon(){
        // 获取所有键
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);
        
        // 检查健是否存在
        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");
        
        // 遍历所有健,并获取健的数据类型
        for (Object key : keys) {
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
        }

        // 删除指定健
        redisTemplate.delete("mylist");
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架,而Redis是一个开源的内存数据存储系统。结合使用Spring Boot和Redis可以实现高效的数据缓存和持久化。 在Spring Boot中使用Redis,首先需要在项目的pom.xml文件中添加Redis的依赖。然后,在application.properties或application.yml文件中配置Redis的连接信息,包括主机名、端口号、密码等。 接下来,可以通过使用Spring Data Redis来简化对Redis的操作。Spring Data Redis提供了一系列的注解和模板类,可以方便地进行数据的读取、写入和删除等操作。 以下是一个简单的示例,演示了如何在Spring Boot中使用Redis: 1. 添加依赖: 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 配置Redis连接信息: 在application.properties或application.yml文件中添加以下配置: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= ``` 3. 创建Redis操作类: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; @Component public class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; public void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object get(String key) { return redisTemplate.opsForValue().get(key); } public void delete(String key) { redisTemplate.delete(key); } } ``` 4. 使用Redis操作类: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired private RedisUtil redisUtil; @GetMapping("/user/{id}") public User getUser(@PathVariable String id) { // 先从缓存中获取数据 User user = (User) redisUtil.get("user:" + id); if (user == null) { // 如果缓存中不存在,则从数据库中获取数据 user = userService.getUserById(id); // 将数据存入缓存 redisUtil.set("user:" + id, user); } return user; } } ``` 以上示例中,我们创建了一个RedisUtil类来封装对Redis的操作,然后在UserController中使用RedisUtil来实现对用户数据的缓存。当请求用户数据时,先从缓存中获取,如果缓存中不存在,则从数据库中获取,并将数据存入缓存

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值