Spring Boot 2精髓 - (12) Redis

spring boot

Redis(REmote Dictionary Server)是一个开源 (BSD许可)、内存存储的数据结构服务器,可用作数据库来存储Key-Value数据,它支持字符串、哈希表、列表、集合、有序集合、位图、地理空间信息等数据类型,同时也可以作为高速缓存和消息队列代理。

安装 Redis

官网下载, 解压后,进入src目录,运行make进行编译

Redis安装完毕,在src目录下有以下两个常用命令:

  • redis-server, 启动 Redis服务器,默认会监听6379端口
  • redis-cli, Redis 自带的客户端管理工具

redis-cli

Redis 一共有 14 个命令组、两百多个命令

运行./redis-cli,进入Redis客户端管理工具

ping命令,用来检验 Redis服务器是否正常运行,服务器返回PONG来应答服务器正常运行

安全设置

redis.conf 文件

1
requirepass Redis!123

启动服务器

1
./redis-server ../redis.conf

基本操作

  • set命令可以添加/覆盖一个字符串或者数字类型
  • get 来获取其值
  • mget来获取多个key的值

Key,通常都是包含逻辑上的命名空间,用符号:分开

对于数字类型的字符串,还有以下命令可以对其进行算数操作:

  • DECR/INCR,数字类型数据自减和自增
  • DECRBY/INCRBY,数字类型数据减去某个指定的整数或者增加某个指定整数
  • INCRBYFLOAT,数字增加 一个浮点数,负数表示减去

keys

Key 是二进制数,因此字符串和图片都可以作为Key,可以通过keys命令来查询 Redis中所有的Key

Key 后面可以用*或者?:

  • Platform:*, 匹配platform:开头的Key
  • pl?tform, 匹配 platform或者pletform
  • *, 查询所有的 keys

  • exist 来判断 Key 是否存在

  • del 命令删除 Key-Value
  • expire 设定 Key 的超时时间
  • ttl 命令则用于查看 Key 的存活时间

Redis List

Redis List类型类似Java的LinkedList,通过链表来完成,向其添加元素速度非常快,但按照索引方式获取元素比较慢

  • rpush 可以将多个值放入list尾部
  • lpush 可以将多 个值放到list头部
  • lrange 从左到右显示指定范围的列表
  • rpop 命令可以从列表尾部取出一个元素
  • lpop 取出列表的头一个元素
  • lien 用来返回List的长度

Redis Hash

Reids Hash 类似Java的HashMap,允许存放多个 Key-Value

Hash 有以下指令

  • hset key field value,给指定的 Key设置一个字段值,如果值已经存在,则覆盖。返回0表示失败,返回1表示成功
  • hget key filed,获取指定 Key 的 filed 字段的值,如果不存在,返回 nil
  • hexists key filed,判断指定的 Key 的自led 字段是否存在,返回 1 表示存在,0 表示不存在
  • hkeys key,返回 Key 所指定的 hash 所有的字段名。 hgetall key,返回所有的字段名和 字段值
  • hdel key field [field],删除多个字段

Hash 的字段支持递增计算,这跟原始类型操作一样,是原子操作

  • hincby key field value,对Key指定的Hash数据中的field的值进行计算,增加整型 value
  • hincbyfloat key field value,对 Key指定的 Hash数据中的field的值进行计算,增加浮点数 value

Set

Set与Java中的Java.util.Set类似,代表了元素不重复的集合,Redis的Set除了元素添加删除操作,还包含了集合的井集、交集等功能

  • sadd key member [member ..],添加元素,比如 sadd ip 192.168.0.1,向 ip 集合添加一个字符串,值是 192.168.0.1
  • srem key member [member ..],删除元素
  • smemberkey,返回一个集合中的所有元素
  • sinter key1 key2,返回两个集合共同的元素,key1 和 key2 分别代表两个集合
  • sinterstore key1 key2 key3,取的 keyl 和 key2 的交集,井存放到key3集合中
  • sunion key1 key2, 返回一个合并后 的集合
  • sunionstore key1 key2 key3,合并key1和key2集合,并存放到key3集合中

Pub/Sub

Reids 除了NoSQL特性,还提供了简单的消息服务,支持publish/subscribe。 Redis 客户端 可以订阅 一个或者多个频道( Channel),这种行为被称为 subscribe。其他 Redis 客户端向这些Channel发送消息,称为publish,订阅这些频道的客户端能接收到这些消息

Spring Boot集成 Redis

依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置 application.properties

1
2
3
4
5
spring.redis.host=127.0.0.1
spring.redis.password=Redis!123
spring.redis.port=6379
#最大连接数,新版本已经取消
#spring.redis.pool.max-active=8

StringRedisTemplate 是Spring Boot默认提供的 Redis 操作接口 ,适合Key和Value都是字符串的情况

也可以采用JDK 序列化的方式来序列化Key和Value的 RedisTemplate类,这 是一个通用类,其实现可以提供不同的序列化方式

使用 StringRedisTemplate

opsFor

  • opsForValue, 用来设置普通的 Key-Value
  • opsForList 用来操作 List结构
    opsForList 提供了 lefPush、leftPushAll、leftPop、rightPush、 rightPushAII、 rightPop 等操作,也提供了 range操作与 size操作,用于查看 List的长度
  • opsForHash,用来操作 Hash 数据结构

绑定Key的操作

可以通过RedisTemplate 提供的boundXXXOps()来指定一个Key,返回BoundXXXOperations
这样在BoundXXXOperations上的操作就不需要提供Key作为参数

  • boundValueOps
  • boundListOps
  • boundHashOps
  • boundSetOps
  • boundZSetOps
  • boundGeoOps

RedisConnection

RedisConnection提供了低级别的API操作,用 byte数组作为参数操作 Redis服务器。

Pub/Sub

  • convertAndSend 方法用于向channal发送消息
  • 订阅消息,需要实现MessageListeneronMessage方法

序列化策略

RedisTemplate则采用默认的序列化策略 JdkSerializationRedisSerializer,这两种序列化策略 都实现了 RedisSerializer接口

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :