原创

SpringBoot 整合Redis缓存(下)

SpringBoot 整合Redis缓存(下)

Redis基本操作Redis基本操作
安全设置
因为互联网上出现了大量的NoSQL数据库被不安全使用而导致的安全问题,因此使用NoSQL的第一步就是设置访问密码,打开redis.conf文件,添加一行密码因为互联网上出现了大量的NoSQL数据库被不安全使用而导致的安全问题,因此使用NoSQL的第一步就是设置访问密码,打开redis.conf文件,添加一行密码
requirepass 123456
Conf 复制
以上配置需要重启Redis服务,并且使用当前已经修改过的conf文件,以下我用Windows环境

redis-server.exe redis.windows.conf
Cmd 复制
下面我们来进行测试,我们重新使用redis-cli进行连接,使用ping命令,会发现需要授权



我们使用auth [password]进行授权

基本操作
set命令可以添加/覆盖一个字符串或者数字类型
get命令可以获取已经添加了的key值
set platform:info "test info"
->ok
get platform:info
->"test info"
Cmd 复制
这里进行一下解释,Redis或者Spring Boot中的key,通常都是包含逻辑上的命名空间,用符号:分开,比如:spring:session:xxx

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

DECR/INCR:数字类型数据自减和自增
DECRBY/INCRBY:数字类型数据减去某个指定的整数或者增加某个指定的整数
INCRBYFLOAT:数字增加一个浮点数,负数表示减去
举个例子举个例子
set platform:version 1
->OK
incrby platform:version 2
->(integer)3
Cmd 复制
keys
Redis是Key-Value数据库,在Redis中,Key是二进制数,因此字符串和图片都是可以作为Key,可以通过keys命令来进行查询Redis中所有的Key
keys platform:*
->"platform:version"
Cmd 复制
Keys后面可以使用*或者?:

platform:*:匹配"platform:"开头的key
plat?orm:匹配platform和其他的带有plat?(占位符)orm的key
*:查询所有的keys
可以通过exist来判断key是否存在

exits platform:version
->(integer)1
Cmd 复制
返回1表示存在,0表示不存在

del和ttl
del [key]:该命令可以指定删除key
ttl [key]:该命令可以查询到key的存活时间
expire [key] [time]:该命令指定key可以存活的时间,单位为s(秒)
Redis中的数据结构
Redis List
Redis List类型类似Java的LinkedList,通过链表来完成,向其添加元素速度非常快,但按照索引方式获取元素比较慢,因此List结构适合哪种大数据量,要求插入速度极快的场景

rpush [key] [value]:可以将多个值放入list结构的尾部,可以理解成将值插入list的右边,同理lpush是可以将多个值放入list结构的头部,也可以理解成从list结构的左边插入

lrange [key] [start] [end]:能够从左到右显示指定范围的列表,最后两个参数是列表的范围,从列表末尾开始

rpop/lpop [key]:该命令可以从了表的末尾/开头取出一个元素(注意,此处元素被取出之后,在原来的结构中就不存在被取出的当前元素了)

llen [key]:该命令用来返回List结构的长度
举个例子,比如消息服务,我们可以通过rpush来追加消息,其他客户端可以通过lpop/rpop来读取List消息,消息读取后就不存在了;再比如一个网站的热点新闻列表没记录可以通过lpush放到新闻列表中,然后访问的用户可以通过lrange [key] 0 9来读取最新的10条记录

Redis Hash
Redis Hash类似Java的HashMap,允许存放多个Key-Value,Spring Boot在Spring Session中即采用了Hash结构来存放用户的Session数据,用以实现WEB系统的水平扩展

Redis Hash:

hset [key] [filed] [value]:给指定的Key设置一个字段值,如果值已经存在,则覆盖,返回0表示失败,返回1表示成功
hget [key] [filed]:获取指定Key的filed字段的值,如果不存在,返回nil
hexists [key] [filed]:判断指定的Key的filed字段是否存在,返回1表示存在,0表示不存在
hgetall [key]:返回Key所指定的hash所有字段名
hdel [key] [filed] ..:删除多个字段
127.0.0.1:6379> del platform:info
(integer) 1
127.0.0.1:6379> hset session:test name seale
(integer) 1
127.0.0.1:6379> hget session:test name
"seale"
127.0.0.1:6379> hset session:test ip 127.0.0.1
(integer) 1
127.0.0.1:6379> hkeys session:test
1) "name"
2) "ip"
127.0.0.1:6379> hgetall session:test
1) "name"
2) "seale"
3) "ip"
4) "127.0.0.1"
Cmd 复制
Hash字段支持递增计算,这跟原始类型的操作一样,是原子操作

hincrby [key] [filed] [value]:对Key指定的Hash数据中的filed的值进行计算,增加整型value
hincrbyfloat [key] [filed] [value]:对Key指定的Hash数据中的field值进行计算,增加浮点数value
127.0.0.1:6379> hset website test 0
(integer) 1
127.0.0.1:6379> hincrby website test 1
(integer) 1
127.0.0.1:6379> hincrby website test 1
(integer) 2
Cmd 复制
Redis Set
Redis Set 和Java.util.Set类似,代表了元素不可重复的集合,
Redis的Set出了元素添加删除操作,还包含了集合的并集,交集功能,可以用于统计访问网站所有的ip,
或者统计网站作者共同的粉丝,听众等功能,常用的命令有:

sadd [key] [member] ..:添加元素,可以添加多个用空格隔开
srem [key] [member] ..:删除元素
smembers [key]:返回一个集合中的所有元素
sinter [key1] [key2]:返回练个集合共同的元素,求交集
sinterstore [key1] [key2] [key3]:将key2和key3的交集放在key1中
sunion [key1] [key2]:返回一个合并后的集合
sunionstore [key1] [key2] [key3]:将key2和key3的并集放到key1中
Redis Pub/Sub
Redis除了NoSQL特性,还提供了简单的消息服务,支持publish/subscribe。Redis客户端可以订阅一个或者多个Channel(频道),这种行为被称为subscribe,其他Redis客户端向这些Channel发送消息,被称为publish,订阅这些频道的客户端能够接受到这些消息

publish/subscribe消息模式很好的进行解耦了消息发送者和消息接受者。消息订阅者不需要知道发送者,发送者也不需要知道消息的接收者,发送者发送的消息将被所有的消息订阅者接受

publish/subscribe模式在Spring Boot中可以用用于事件通知,如配置文件更新,缓存更新等等

Redis还提供了订阅指定的模式,使用psubscribe命令:

psubscribe news.*
Cmd 复制
上面例子的意思为:订阅所有news.开头的频道
psubscribe支持的表达式

news.*:所有news.开头的频道
news-?:订阅news-xx频道
news[123]:订阅news-1/news-2/news-3频道
命令:

subscribe [channelname]:订阅频道
psubscribe [pattern]:根据表达式订阅频道
publish [channel] [message]:给指定频道发送message
Spring Boot中集成Redis
在Maven的pom中引入

<!--Redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
XML 复制
之后在application.yml中进行一些基本配置
redis:
    host: 127.0.0.1
    password: 123456
    port: 6379
    # 最大连接数
    jedis:
      pool:
        max-active: 10
Yml 复制
属性max-active指定了Spring Boot应用的最大连接数,0表示无限制

StringRedisTemplate
简介
StringRedisTemplate是Spring Boot内置的操作Redis的Api,
另外一个内置的Api是RedisTemplate,StringRedisTemplate是Api假定所有的数据类型都是字符类型,比如key是字符串,
value也是字符串,List/Hash的元素值也是字符串,
对于常见的Spring Boot应用系统来说,
使用字符串也已经足够了,而且也能方便的通过客户端管理工具进行管理

StringRedisTemplate继承了RedisTemplate,与其父类不同的是重新设置了序列化策略,使用StringRedisSerializer类来序列化K-V,以及List/Hash/Set等数据结构中的元素
测试
为了测试是否集成成功,我们使用内置的StringRedisTemplate来进行测试,完成一个简单的Redis操作

我们编写一个Controller类来进行简单的验证

package com.eendtech.boot.bootExample.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping(value = "/strredis")
public class RedisStringController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @RequestMapping("/set/{para}")
    public String env(@PathVariable String para){
        stringRedisTemplate.opsForValue().set("testenv",para);
        String str = stringRedisTemplate.opsForValue().get("testenv");
        return str;
    }

}
Java 复制

后端
  • 泽泽泽
  • 2020-11-05 11:24:58.814

评论区