首页 > 数据库 >Redis入门

Redis入门

时间:2024-06-23 18:29:16浏览次数:3  
标签:key 入门 Redis value 哈希 集合 redisTemplate

目录

Redis简介

Redis下载

启动Redis服务

客户端连接

 Redis数据类型

Redis常用命令

字符串操作命令

SET key value        设置指定key的值

GET key        获取指定key的值

SETEX key seconds value        设置指定key的值,并将 key 的过期时间设为 seconds 秒

SETNX key value        只有在 key 不存在时设置 key 的值​编辑

哈希操作命令

HSET key field value将哈希表 key 中的字段 field 的值设为 value

​编辑 HGET key field        获取存储在哈希表中指定字段的值

HDEL key field        删除存储在哈希表中的指定字段

HKEYS key        获取哈希表中所有字段

HVALS key        获取哈希表中所有值

列表操作命令

LPUSH key value1 [value2]        将一个或多个值插入到列表头部

​编辑

​编辑LRANGE key start stop        获取列表指定范围内的元素

​编辑RPOP key        移除并获取列表最后一个元素

​编辑

​编辑LLEN key        获取列表长度

集合操作命令

SADD key member1[member2]     向集合添加一个或多个成员

​编辑

​编辑SMEMBERS key        返回集合中的所有成员

​编辑SCARD key        获取集合的成员数

​编辑SINTER key1 [key2]        返回给定所有集合的交集

​编辑SUNION key1 [key2]        返回所有给定集合的并集

​编辑SREM key member1 [member2]删除集合中一个或多个成员

有序集合操作命令

ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员

ZRANGE key start stop [WITHSCORES]        通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increment member        有序集合中对指定成员的分数加上增量 increment

ZREM key member [member ...]        移除有序集合中的一个或多个成员​编辑

通用命令 

KEYS pattern        查找所有符合给定模式( pattern)的 key

​编辑

​编辑EXISTS key        检查给定 key 是否存在

​编辑TYPE key        返回 key 所储存的值的类型

​编辑

​编辑DEL key        该命令用于在 key 存在是删除 key

Redis的Java客户端 

Spring Data Redis使用方式

导入Spring Data Redis 的maven坐标

配置Redis数据源

编写配置类,创建RedisTemplate对象

通过RedisTemplate对象操作Redis 

1、操作字符串类型的数据

 2、操作哈希类型的数据

  3、操作列表类型数据

4、操作集合类型数据 

 5、操作有序集合类型

6、操作通用命令 



Redis简介

Redis是一个基于内存的 key-value 结构数据库。

基于内存存储,读写性能高。适合存储热点数据(热点商品、资讯、新闻)

Redis是一种基于内存、开源、支持多种数据结构,并具备可选持久化的键值对存储数据库。

Redis,全称为Remote Dictionary Server,是一个使用ANSIC编写的开源软件,遵守BSD协议。它主要用作数据库、缓存和消息代理。Redis区别于传统关系型数据库的是其NoSQL的特性,能够提供低延迟的高速读写操作,支撑海量数据和流量,同时拥有大规模集群的管理功能和较低的运营成本。更多关于Redis的详细分析如下:

1. 基本特性
   高性能:由于Redis基于内存运行,相较传统的磁盘数据库,它能提供极低延迟的读写速度。作为对比,Redis能每秒进行大约110,000次写入操作或81,000次读取操作。
   数据类型丰富:Redis不仅支持简单的字符串,还包括哈希、列表、集合、有序集合等五种主要数据类型,以及一种虚拟类型,这使得Redis可以满足各种不同应用场景的需求。
   原子性操作:所有的Redis操作都是原子性的,保证了操作的完整性和一致性,尤其在多客户端并发访问时,能够避免数据冲突和服务器不一致的问题。
2. 应用场景
   缓存系统:利用Redis的高速读写特性,可以大幅提升系统的读性能。适合缓存那些“热点”数据,如高频读取但写入较少的数据。
   计数器:Redis的原子操作使得它成为实现计数器的优选方案,常用于点赞数、访问量等需要精确同步的场景。
   消息队列:发布订阅模式允许消息在各个客户端之间传递,适用于聊天服务、实时通知等功能。
3. 技术特点
   单线程模型:Redis采用单进程单线程的方式运行,减少了上下文切换的开销,同时简化了并发处理的复杂性。
   数据结构设计:Redis有着独特的数据结构设计,例如简单动态字符串(SDS),与C字符串相比,它在获取字符串长度、减少内存重新分配次数等方面进行了优化。
   事务支持:通过MULTI、EXEC和DISCARD命令,Redis支持将多个命令序列化后按顺序执行,保证命令的原子性。
4. 部署架构
   主从复制:通过主从复制配置,可以提高数据的可用性,同时用从节点分担读请求,减轻主节点压力。
   高可用解决方案:Redis Sentinel提供了监控、通知和自动故障转移的功能,保障了服务的高可用性。
   分布式集群:为了应对内存资源的横向扩展需求,Redis Cluster让客户端可以感觉到一个集中式服务,而实际上由多个节点组成。

总而言之,Redis以其高性能、丰富的数据类型、广泛的应用场景和技术特性,成为了现代互联网技术中不可或缺的关键组件。从简单的缓存需求到复杂的消息队列,Redis都能提供高效可靠的解决方案。在选择使用Redis时,除了考虑如何充分发挥其性能优势外,还需关注合适的配置和优化策略以确保安全和效率。

Redis下载

Releases · microsoftarchive/redis · GitHubRedis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - Releases · microsoftarchive/redisicon-default.png?t=N7T8https://github.com/microsoftarchive/redis/releases

启动Redis服务

redis-server.exe redis.windows.conf

客户端连接

redis-cli.exe

 Redis数据类型

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

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

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

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

集合 set        无序集合,没有重复元素,类似于Java中的Hashset

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

Redis常用命令

字符串操作命令

SET key value        设置指定key的值

GET key        获取指定key的值

SETEX key seconds value        设置指定key的值,并将 key 的过期时间设为 seconds 秒

SETNX key value        只有在 key 不存在时设置 key 的值

哈希操作命令

HSET key field value将哈希表 key 中的字段 field 的值设为 value

 

 HGET key field        获取存储在哈希表中指定字段的值

 

HDEL key field        删除存储在哈希表中的指定字段

HKEYS key        获取哈希表中所有字段

HVALS key        获取哈希表中所有值

列表操作命令

LPUSH key value1 [value2]        将一个或多个值插入到列表头部


LRANGE key start stop        获取列表指定范围内的元素


RPOP key        移除并获取列表最后一个元素


LLEN key        获取列表长度

集合操作命令

SADD key member1[member2]     向集合添加一个或多个成员


SMEMBERS key        返回集合中的所有成员


SCARD key        获取集合的成员数


SINTER key1 [key2]        返回给定所有集合的交集


SUNION key1 [key2]        返回所有给定集合的并集


SREM key member1 [member2]删除集合中一个或多个成员

有序集合操作命令

ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员

ZRANGE key start stop [WITHSCORES]        通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increment member        有序集合中对指定成员的分数加上增量 increment

ZREM key member [member ...]        移除有序集合中的一个或多个成员

通用命令 

Redis的通用命令是不分数据类型的,都可以使用的命令:

KEYS pattern        查找所有符合给定模式( pattern)的 key


EXISTS key        检查给定 key 是否存在


TYPE key        返回 key 所储存的值的类型


DEL key        该命令用于在 key 存在是删除 key

Redis的Java客户端 

Redis 的 Java 客户端很多,这里就使用Spring Data Redis

Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装。
在 Spring 项目中,可以使用spring Data Redis来简化操作。 

Spring Data Redis使用方式

操作步骤:

导入Spring Data Redis 的maven坐标

pom.xml:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

配置Redis数据源

application.yml:

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

编写配置类,创建RedisTemplate对象

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 

1、操作字符串类型的数据
 //操作字符串类型的数据
    @Test
    public void testString(){
        //set
        redisTemplate.opsForValue().set("city","北京");
        //get
        String city = (String) redisTemplate.opsForValue().get("city");
        System.out.println(city);
        //setex
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
        //setnx
        redisTemplate.opsForValue().setIfAbsent("csdn",1);
        redisTemplate.opsForValue().setIfAbsent("csdn",2);
    }
 2、操作哈希类型的数据
//操作哈希类型的数据
 @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        //hset
        hashOperations.put("100","name","xiaohuolong");
        hashOperations.put("100","age","18");
        //hget
        String name =(String) hashOperations.get("100", "name");
        System.out.println(name);
        //hkeys
        Set keys = hashOperations.keys("100");
        keys.forEach(s-> System.out.println(s));
        //hvals
        List values = hashOperations.values("100");
        values.forEach(s-> System.out.println(s));
        //hdel
        hashOperations.delete("100","age");
    }

  3、操作列表类型数据
 //操作列表类型数据
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
        //lpush
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");

        //lrange
        List mylist = listOperations.range("mylist", 0, -1);
        mylist.forEach(s-> System.out.println(s));

        //rpop
        listOperations.rightPop("mylist");
        //llen
        listOperations.size("mylist");
    }

 

4、操作集合类型数据 
//操作集合类型数据
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
        //sadd
        setOperations.add("set1","a","b","c","d");
        setOperations.add("set2","a","b","x","y");
        // smembers
        Set set1 = setOperations.members("set1");
        set1.forEach(s-> System.out.println(s));
        // scard
        Long size = setOperations.size("set1");
        System.out.println(size);
        // sinter
        Set intersect = setOperations.intersect("set1", "set2");
        intersect.forEach(s-> System.out.println(s));
        // sunion
        Set union = setOperations.union("set1", "set2");
        union.forEach(s-> System.out.println(s));
        // srem
        setOperations.remove("set1","a","b");
    }
 5、操作有序集合类型
//操作有序集合类型
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //zadd
        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",13);
        zSetOperations.add("zset1","c",11);
        // zrange
        Set zset1 = zSetOperations.range("zset1", 0, -1);
        zset1.forEach(s-> System.out.println(s));
        // zincrby
        zSetOperations.incrementScore("zset1","a",5);
        //zrem
        zSetOperations.remove("zset1","a");
    }

6、操作通用命令 
//操作通用命令
    @Test
    public void testCommon(){
        // keys
        Set keys = redisTemplate.keys("*");
        keys.forEach(s-> System.out.println(s));
        // exists
        Boolean name = redisTemplate.hasKey("name");
        // type
       keys.forEach(s-> System.out.println(redisTemplate.type(s)));

        // del
        redisTemplate.delete("mylist");
    }


这一期就说到这里啦

努力遇见更好的自己!!!

标签:key,入门,Redis,value,哈希,集合,redisTemplate
From: https://blog.csdn.net/m0_46702681/article/details/139897976

相关文章

  • 「树莓派入门」树莓派简介
    树莓派入门篇-树莓派简介引言树莓派,这个名字听起来是不是有点可爱又神秘?其实,它是一种功能强大的小型计算机,尺寸小巧,却能完成许多让人惊叹的任务。在本教程中,我们将一起探索树莓派的世界,了解它的背景、功能以及如何入门学习。一、树莓派的基本背景和功能1.什么是树莓......
  • AG32 MCU Start Kit 开发板快速入门及 21天体验活动
    AG32IDE开发环境搭建-完整版海振远科技2024-6-18AG32MCU开发板的使用使用准备在使用开发板前,请确认已经安装好开发环境。安装环境过程,请参考文档《AG32开发环境搭建.pdf》上电:给开发板5V供电,打开开关,可以看到电源旁边的小红灯亮起。使用example例程打开ex......
  • 对于spring cloud的了解到入门
    一、SpringCloud介绍1.概念:Springcloud是一系列框架的有序集合。它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用springboot的开发风格做到一键启动和部署。2.优缺点(主......
  • Hyperf redis 异步队列使用
    config/autoload/processes.phpuseApp\Book\Process\CreateQrcodeComsumer;return[Mine\Crontab\MineCrontabProcess::class,Hyperf\AsyncQueue\Process\ConsumerProcess::class,CreateQrcodeComsumer::class//增加自定义的异步队列类];由于hyper......
  • Perl语言入门:探索Perl语法规则的基本特点
    Perl是一种高级、通用的、解释型的编程语言,以其强大的文本处理能力而闻名。Perl的语法规则融合了C、Sed、awk和Shell脚本等多种编程语言的特点,形成了自己独特的风格。对于初学者来说,理解Perl的语法规则是掌握这门语言的关键。本文将详细介绍Perl语法规则的基本特点,帮助初学......
  • 任务调度SpringTask入门
    任务调度简介1.1什么是任务调度在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作。常见的任务调度框架有Quartz和SpringTask等。SpringTask入门1.2SpringTask入门小Demo创建模块52xbc-......
  • 《Python编程:从入门到实践》
    书籍介绍 hi,我是神虚本书是一本针对所有层次的Python读者而作的Python入门书。全书分两部分:第一部分介绍用Python编程所必须了解的基本概念,包括matplotlib、NumPy和Pygal等强大的Python库和工具介绍,以及列表、字典、if语句、类、文件与异常、代码测试等内容;第二部......
  • NSIS 入门教程 (三)
    引言 在教程的第二部分中,我们为安装程序增加了一个卸载程序,并查看了一些其他的向导页面以及安装部分的选择。第三部分的目标是使安装程序的外观更加现代化。 更现代的外观 为了给安装程序一个更现代的外观,我们要启用现代用户界面。要提升我们的安装程序(基于“secondinsta......
  • 深入理解redis持久化—AOF日志
    redis为什么需要持久化redis是内存数据库,redis所有的数据都保存在内存中如果此时pc关机或重启,那么内存中的用户数据岂不是丢失了?redis这么不安全吗?作为数据库,保证数据的安全,持久是基本需求,redis采用了AOF和RDB两种持久化方式,将用户数据以特殊形式保存在磁盘中,确保重启时......
  • C++入门 vector深度剖析及模拟实现
    目录vector析构函数模拟实现vector赋值拷贝模拟实现vector拷贝构造模拟实现vector构造函数模拟实现类模板的成员函数n个val构造单参数和多参数对象隐式类型转换使用memcpy拷贝问题在上两篇有关vector的模拟实现中,还有构造,拷贝构造,赋值拷贝以及析构函数没有实现,本篇主......