缓存中间件Redis

简介

Redis(Remote Dictionary Server)是一个基于内存的 Key-Value 结构化存储的存储系统。在实际生产环境中可以将其作为数据库、缓存和消息中间件来使用。

由于 Redis 是基于内存的、采用 Key-Value 结构化存储的 NoSQL 数据库,加上其底层采用单线程和多路 I/O 复用模型,所以 Redis 的查询速度很快。根据 Redis 官方提供的数据,它可以实现每秒查询的次数达到10万次,即 QPS 为100000+,这在某种程度上足以满足大部分的高并发请求。

三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供strings(字符串),list(列表),set(集合),zset(有序集合),hash(哈希)等数据结构的存储(支持多种数据结构)。
  • Redis支持数据的备份,即 master-slave 模式的数据备份。
     

Redis 的4种典型应用场景

缓存中间件Redis_第1张图片

1、热点数据的存储与展示

  • “热点数据”可以理解为大部分用户频繁访问的数据,这些数据对于所有的用户来说,访问将得到同一个结果,比如“微博热搜”(每个用户在同一时刻的热搜是一样的),如果采用传统的“查询数据库”的方法获取热点数据,将大大增加数据库的压力,而降低数据库的读写性能。

2、最近访问的数据

  • 用户最近访问过的数据记录在数据库中将采用“日期字段”作为标记,频繁查询的实现是采用该日期字段与当前时间做“时间差”的比较查询,这种方式是相当耗时的。而采用 Redis 的 List 作为“最近访问的足迹”的数据结构,将大大降低数据库频繁的查询请求。

3、并发访问

  • 对于高并发访问某些数据的情况,Redis可以将这些数据预先装载在缓存中,每次高并发过来的请求则可以直接从缓存中获取,减少高并发访问给数据库带来的压力。

4、排名

  • “排行榜”在很多互联网产品中也是比较常见的。采用Redis的有序集合(Sorted Set)可以很好地实现用户的排名,避免了传统的基于数据库级别的Order By及Group By查询所带来的性能问题。

除此之外,Redis还有诸多应用场景,比如消息队列、分布式锁等。

Redis 的使用

常用的几个命令:

1)查看Redis缓存中存储的所有key
keys*

2)在缓存中创建一个key,设置其名字为redis:order:no:10011(按照自己的习惯取名即可,但是建议最好具有某种含义),设置其值为10011,命令为:
set redis:order:no:1001110011。

3)查看缓存中指定 key 的取值,如获取刚刚创建的key:redis:order:no:10011的取值,命令为:
get redis:order:no:10011

4) 删除缓存中指定的 key, 如删除 key: redis:order:no:10011, 命令为 :
del redis:order:no:10011。
执行命令之后,如果返回值为1,则代表删除成功。

exists key  判断某个key是否存在
type key    查看你的key是什么类型

expire key 10   10秒钟:为给定的key设置过期时间
ttl key         查看还有多少秒过期,-1表示永不过期,-2表示已过期



select   命令切换数据库
dbsize   查看当前数据库的key的数量
flushdb  清空当前库
flushall 通杀全部库

两个核心操作组件 StringRedisTemplate 及 RedisTemplate 的自定义注入配置

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedis
Serializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
//通用化配置
@Configuration
public class CommonConfig {
	//Redis连接工厂
	@Autowired
	private RedisConnectionFactory redisConnectionFactory;
	//缓存操作组件RedisTemplate的自定义配置
	@Bean
	public RedisTemplate redisTemplate(){
		//定义RedisTemplate实例
		RedisTemplate redisTemplate=new RedisTemplate
			();
		//设置Redis的连接工厂
		redisTemplate.setConnectionFactory(redisConnectionFactory);
		//TODO:指定大Key序列化策略为String序列化,Value为JDK自带的序列化策略
		redisTemplate.setKeySerializer(new StringRedisSerializer());
		redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
		//TODO:指定hashKey序列化策略为String序列化-针对hash散列存储
		redisTemplate.setHashKeySerializer(new StringRedisSerializer());
		return redisTemplate;
	}
	
	//缓存操作组件StringRedisTemplate
	@Bean
	public StringRedisTemplate stringRedisTemplate(){
		//采用默认配置即可-后续有自定义配置时则在此处添加即可
		StringRedisTemplate stringRedisTemplate=new StringRedisTemplate();
		stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
		return stringRedisTemplate;
	}
}

你可能感兴趣的:(中间件,数据库,redis,java)