代码编织梦想

NoSql

内容

非关系型数据库,数据与数据之间没有关系,以键值对的形式存储

优点

1.易扩展

2.高性能

3.灵活的数据类型

补充

关系型数据库由于数据在硬盘上存储,查询时需要与硬盘发生Io(读操作),可能导致数据库崩溃,所以出现了非关系型数据库

Redis

内容

远程字典服务,是一个开源的,使用C语言编写的,支持网络交互的,内存中的Key-Value数据结构存储系统,支持多种语言,它可以用作数据库、缓存和消息中间件

特点

1.直接将数据存储在内存中

2.数据结构简单(以键值对的形式存储)

3.高性能

4.支持数据持久化(以键值对的形式可以备份在硬盘上)

数据类型(值)

1.String

单值缓存

set key value 设置一个键值对

get value 通过键获取值

del key 删除键

key * 列出所有的键

对象缓存

set user {name:jim,age:20}

计数器(用于文章访问量)

set key 0

incr key 自增1

decr key 自减1

get key 获取当前数值

2.Hash(哈希)

用于存储对象(对象中的值被修改)

hset key field value 存储一个哈希表key的键值

hmset key field value [field value …] 存储多个键值对

hget key field 获取哈希表key对应的field键值

hmget key field [field …] 批量获取哈希表key中多个field键值

hdel key field [field …] 删除哈希表key中的field键值

hlen key 返回哈希表key中的field的数量

hgetall key 返回哈希表key中所有的键值

hincrby key field 增加的值(减少给负数)

使用场景:电商购物车

3.List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

lpush key value[value…] 将一个或多个值插入到key列表的表头(最左边)

rpush key value[value…] 将一个或多个值插入到key列表的表尾(最右边)

lpop key 移除并返回key列表的头元素

rpop key 移除并返回key列表的尾元素

lrange key start stop 返回列表key中指定区间内的元素,区间以偏移量start和stop

适用场景:可以用来存储接收到的消息数据

4.Set(集合)

Redis 的 Set 是无序集合。

sadd key member[member…] 往集合key中存入元素,元素存在则忽略,若key不存在则新建

srem key member[member…] 从集合key中删除元素

smembers key 获取集合key中所有元素

scard key 获取集合key的元素个数

5.Zset(sorted set:有序集合)

redis zset 也是不允许重复的成员,但是是有序的。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。、

zadd key score member[[score member]…] 往有序集合key中加入带分值元素

zrem key member[member…] 从有序集合key中删除元素

zscore key member 返回有序集合key中元素member的分值

zincrby key increment member 为有序集合key中元素member的分值加上increment

zcard key 返回有序集合key中元素个数

zrange key start stop[withscores] 正序获取有序集合keyastart下标到stop下标的元素

使用场景:记录微信朋友圈记录点赞用户

设置失效时间

例如缓存,验证码等数据,我们希望它们能在一定时间内自动的被销毁。redis提供了一些命令,能够让我们对key设置过期时间,并且让key过期之后被自动删除.

设置值时直接设置有效时间

EX 表示以秒为单位

PX表示以毫秒为单位 EX,PX不区分大小写

set name jim EX 30 设置失效时间为30秒

ttl 键 查看剩余时间(秒)

pttl 键 查看剩余时间(毫秒)

设置值后设置有效时间

expire 键 时间(秒)

pexpire 键 时间(毫秒)

SpringBoot集成Redis

搭建

1.添加redis依赖

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

2.配置连接redis

spring:
  redis:
    host: 192.168.31.100
    port: 6379
    password: 111
    database: 0
    pool:
     max-active: 8  # 连接池最大连接数(使用负值表示没有限制)
     max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
     max-idle: 8 # 连接池中的最大空闲连接
     min-idle: 0 # 连接池中的最小空闲连接
     timeout: 5000ms # 连接超时时间(毫秒)

3.注入RedisTemplate

@Autowired
RedisTemplate redisTemplate;

4.测试

注:RedisTemplate中的两个方法

hasKey(key) 判断是否有这个key

delete(key) 删除这个key以及对应的值

序列化配置类

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 {

    /**
     * 序列化键,值
     * @param connectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        StringRedisSerializer redisSerializer = new StringRedisSerializer();

        redisTemplate.setKeySerializer(redisSerializer);设置string类型的key,序列化方式是String
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);//设置string类型的值,序列化方式为json

        //redisTemplate.setHashKeySerializer(redisSerializer);
        //redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        return redisTemplate;
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/penghaixia666/article/details/131023671