四十三、Redis基础

2023-12-14 02:45:02

目录

一、认识NoSql

1、定义:

2、常见语法

3、与关系型数据库(SQL)的区别:

二、认识Redis

1、定义:?

2、特征:

3、Key的结构:

三、安装Redis

四、Redis常见命令

1、数据结构介绍

2、Redis的通用命令

(1)KEYS:查看符合模板的所有key

(2)DEL:删除一个指定的key

(3)EXISTS:判断key是否存在

(4)EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

(5)TTL:查看一个KEY的剩余有效期

3、String类型的命令

(1)SET:添加或者修改已经存在的一个String类型的键值对

(2)GET:根据key获取String类型的value

(3)MSET:批量添加多个String类型的键值对

(4)MGET:根据多个key获取多个String类型的value

(5)INCR:让一个整型的key自增1

(6)INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2

(7)INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

(8)SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

(9)SETEX:添加一个String类型的键值对,并且指定有效期

4、Hash类型的命令

(1)HSET key field value:添加或者修改hash类型key的field的值

(2)HGET key field:获取一个hash类型key的field的值

(3)HMSET:批量添加多个hash类型key的field的值

(4)HMGET:批量获取多个hash类型key的field的值

(5)HGETALL:获取一个hash类型的key中的所有的field和value

(6)HKEYS:获取一个hash类型的key中的所有的field

(7)HVALS:获取一个hash类型的key中的所有的value

(8)HINCRBY:让一个hash类型key的字段值自增并指定步长

(9)HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

5、List类型的命令

?(1)LPUSH key? element ... :向列表左侧插入一个或多个元素

(2)LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

(3)RPUSH key? element ... :向列表右侧插入一个或多个元素

(4)RPOP key:移除并返回列表右侧的第一个元素

(5)LRANGE key star end:返回一段角标范围内的所有元素

(6)BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

6、Set类型的命令

?(1)SADD key member ... :向set中添加一个或多个元素

(2)SREM key member ... : 移除set中的指定元素

(3)SCARD key: 返回set中元素的个数

(4)SISMEMBER key member:判断一个元素是否存在于set中

(5)SMEMBERS:获取set中的所有元素

(6)SINTER key1 key2 ... :求key1与key2的交集

(7)SDIFF?key1 key2 ... :求key1与key2的差集

(8)SUNION?key1 key2 ... :求key1与key2的并集

7、SortedSet类型的命令

(1)ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值

(2)ZREM key member:删除sorted set中的一个指定元素

(3)ZSCORE key member : 获取sorted set中的指定元素的score值

(4)ZRANK key member:获取sorted set 中的指定元素的排名

(5)ZCARD key:获取sorted set中的元素个数

(6)ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

(7)ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值

(8)ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

(9)ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

(10)ZDIFF、ZINTER、ZUNION:求差集、交集、并集

五、Redis的Java客户端

1、实现jedis

(1)引入依赖

(2)建立连接,编写yml文件

(3)测试

2、jedis连接池

3、SpringDataRedis

(1)定义

(2)实现

4、RedisTemplate

5、StringRedisTemplate


一、认识NoSql

1、定义:

NoSQL是指非关系型数据库,在这种数据库中,数据没有被组织成关系表,而是以一种更灵活的方式存储。NoSQL数据库通常不需要预定义模式以及支持水平扩展能力,这使得它们能够处理大规模和分布式数据。

NoSQL数据库可分为4类:键值存储、文档存储、列存储和图形数据库。

  1. 键值存储:通过在每个键上存储对应的值,实现简单的数据将数据以键值对的形式保存,例如Redis、Memcached等。

  2. 文档存储:文档数据存储在类似JSON的无模式格式中。文档存储在MongoDB、Couchbase等数据库中。

  3. 列存储:数据存储在列簇中,而不是行中,适合存储结构化和半结构化数据。例如HBase。

  4. 图形数据库:图形数据库是一种结构化数据存储方式,用于处理图形或半结构化数据。例如Neo4j、OrientDB等。

2、常见语法

3、与关系型数据库(SQL)的区别:

二、认识Redis

1、定义:?

Redis是一个开源的,基于内存的键值对存储数据库,可以用作缓存、消息队列、计数器等。

2、特征:

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据持久化
  • 支持主从集群、分片集群
  • 支持多语言客户端

3、Key的结构:

三、安装Redis

安装指南icon-default.png?t=N7T8https://blog.csdn.net/icbbm/article/details/134895407?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134895407%22%2C%22source%22%3A%22icbbm%22%7D

四、Redis常见命令

1、数据结构介绍

????????在官网( https://redis.io/commands?)可以查看到不同的命令

2、Redis的通用命令

(1)KEYS:查看符合模板的所有key

以“a”开头

(2)DEL:删除一个指定的key

先批量创建键,再做批量删除,此时因为k4不存在,所以只删掉3个

(3)EXISTS:判断key是否存在

(4)EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

(5)TTL:查看一个KEY的剩余有效期

3、String类型的命令

(1)SET:添加或者修改已经存在的一个String类型的键值对

(2)GET:根据key获取String类型的value

(3)MSET:批量添加多个String类型的键值对

(4)MGET:根据多个key获取多个String类型的value

(5)INCR:让一个整型的key自增1

(6)INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 num值自增2

(7)INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

(8)SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

(9)SETEX:添加一个String类型的键值对,并且指定有效期

4、Hash类型的命令

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

KEY

VALUE

field

value

heima:user:1

name

Jack

age

21

heima:user:2

name

Rose

age

18

(1)HSET key field value:添加或者修改hash类型keyfield的值

(2)HGET key field:获取一个hash类型keyfield的值

(3)HMSET:批量添加多个hash类型keyfield的值

(4)HMGET:批量获取多个hash类型keyfield的值

(5)HGETALL:获取一个hash类型的key中的所有的fieldvalue

(6)HKEYS:获取一个hash类型的key中的所有的field

(7)HVALS:获取一个hash类型的key中的所有的value

(8)HINCRBY:让一个hash类型key的字段值自增并指定步长

(9)HSETNX:添加一个hash类型的keyfield值,前提是这个field不存在,否则不执行

??

5、List类型的命令

(1)LPUSH key? element ... :向列表左侧插入一个或多个元素

(2)LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

(3)RPUSH key? element ... :向列表右侧插入一个或多个元素

(4)RPOP key:移除并返回列表右侧的第一个元素

(5)LRANGE key star end:返回一段角标范围内的所有元素

(6)BLPOP和BRPOP:与LPOPRPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

6、Set类型的命令

(1)SADD key member ... :向set中添加一个或多个元素

(2)SREM key member ... : 移除set中的指定元素

(3)SCARD key: 返回set中元素的个数

(4)SISMEMBER key member:判断一个元素是否存在于set

(5)SMEMBERS:获取set中的所有元素

(6)SINTER key1 key2 ... :求key1key2的交集

(7)SDIFF?key1 key2 ... :求key1key2的差集

(8)SUNION?key1 key2 ... :求key1key2的并集

7、SortedSet类型的命令

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可

(1)ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score

(2)ZREM key member:删除sorted set中的一个指定元素

(3)ZSCORE key member : 获取sorted set中的指定元素的score
(4)ZRANK key member:获取sorted set 中的指定元素的排名

(5)ZCARD key:获取sorted set中的元素个数

(6)ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

(7)ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment

(8)ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

(9)ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

(10)ZDIFF、ZINTERZUNION:求差集、交集、并集

五、Redis的Java客户端

1、实现jedis

(1)引入依赖
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>5.0.0</version>
        </dependency>
(2)建立连接,编写yml文件
spring:
  redis:
    host: 192.168.248.152
    port: 6379
    password: 1234
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms
(3)测试
    @Test
    void testSaveUser() {
        // 写入数据
        redisTemplate.opsForValue().set("user:100", new User("哥", 21));
        // 获取数据
        User o = (User) redisTemplate.opsForValue().get("user:100");
        System.out.println("o = " + o);
    }

2、jedis连接池

3、SpringDataRedis

(1)定义

SpringDataSpring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:Spring Data Redis

  • 提供了对不同Redis客户端的整合(LettuceJedis
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模型
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDKJSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于RedisJDKCollection实现

API

返回值类型

说明

redisTemplate.opsForValue()

ValueOperations

操作String类型数据

redisTemplate.opsForHash()

HashOperations

操作Hash类型数据

redisTemplate.opsForList()

ListOperations

操作List类型数据

redisTemplate.opsForSet()

SetOperations

操作Set类型数据

redisTemplate.opsForZSet()

ZSetOperations

操作SortedSet类型数据

redisTemplate

通用的命令

(2)实现

1.引入依赖

        <!--redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--common-pool-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

2.配置yml文件

spring:
  redis:
    host: 192.168.248.152
    port: 6379
    password: 1234
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms

3.注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

4.测试

    @Test
    void testString() {
        // 写入一条String数据
        redisTemplate.opsForValue().set("name", "虎哥");
        // 获取string数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }

4、RedisTemplate

缺点:

  • 可读性差
  • 内存占用较大

自定义RedisTemplate的序列化方式代码:

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        // 创建RedisTemplate对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);
        // 创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置Key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置Value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        // 返回
        return template;
    }
}

5、StringRedisTemplate

手动序列化:

    @Test
    void testSaveUser() throws JsonProcessingException {
        // 创建对象
        User user = new User("虎哥", 21);
        // 手动序列化
        String json = mapper.writeValueAsString(user);
        // 写入数据
        stringRedisTemplate.opsForValue().set("user:200", json);

        // 获取数据
        String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
        // 手动反序列化
        User user1 = mapper.readValue(jsonUser, User.class);
        System.out.println("user1 = " + user1);
    }

文章来源:https://blog.csdn.net/icbbm/article/details/134894452
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。