一、redis介绍
-
简介
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
-
优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
二、redis服务启动
-
windows下安装
下载地址:https://github.com/tporadowski/redis/releases。
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
开两个cmd窗口,一个启动redis-server.exe,一个启动redis-cli.exe
-
linux下安装
指导链接:Redis 安装 | 菜鸟教程 (runoob.com)
三、java 中使用redis
- pom.xml引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.32</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- properties配置
// 当前为spring 2.x.x版本下配置 spring.datasource.redis.database=0 spring.datasource.redis.host=127.0.0.1 //redis服务器ip spring.datasource.redis.password= //密码为配置的redis权限密码 spring.datasource.redis.port=6379 // sping 3.x.x版本下配置 # Redis 数据库索引(默认为0) spring.data.redis.database=0 # Redis 服务的ip,我的是在虚拟机的服务器上。 spring.data.redis.host=192.168.45.129 # Redis 端口 spring.data.redis.port=6379 # Redis 密码,默认为空,可以修改 redis.conf配置文件 spring.data.redis.password= # 最大可用连接数 spring.redis.pool.max-active=200 # 从连接池中获取连接最大等待时间 spring.redis.pool.max-wait=-1 # 最大空闲连接数 spring.redis.pool.max-idle=10 # 最小空闲连接数 spring.redis.pool.min-idle=0 # redis连接超时时间(单位为毫秒) spring.data.redis.timeout=1000
- bean创建
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
public class RedisConfig {
/**
* 连接工厂
*/
@Bean
//读取配置文件中redis的配置
@ConfigurationProperties(prefix = "spring.datasource.redis")
public JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
}
/**
* RedisTemplate
* @param redisConnectionFactory redis连结
* @return RedisTemplate
*/
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//String
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
ObjectMapper om = new ObjectMapper();
//PropertyAccessor.ALL:所有;JsonAutoDetect.Visibility.ANY修饰范围:ANY-所有
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//指定序列化输入的类型,类必须是非final修饰的
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<>();
//连接工厂
template.setConnectionFactory(redisConnectionFactory);
//全局key的序列化策略
template.setKeySerializer(stringRedisSerializer);
//全局value的序列化策略
template.setValueSerializer(jackson2JsonRedisSerializer);
//全局HashKey的序列化策略
template.setHashKeySerializer(stringRedisSerializer);
//全局HashValue的序列化策略
template.setHashValueSerializer(jackson2JsonRedisSerializer);
//支持事务
template.setEnableTransactionSupport(true);
template.afterPropertiesSet();
return template;
}
}
- 工具类封装
// 示例,具体使用依照自身业务情况而定
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public String getString(String key) {
Object value = redisTemplate.opsForValue().get(key);
System.out.println(value);
return value == null ? null : value.toString();
}
public void setValue(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
}
四、redis常见指令
- 【redis-cli --raw】客户端启动避免中文乱码
- 【redis-cli】客户端启动
- 【redis-cli -h host -p port -a password】在远程服务上执行命令
- 【ECHO "Hello World"】打印给定的字符串
- 【DEL KEY_NAME】删除指定键
- 【AUTH PASSWORD】鉴权登录
- 【EXISTS KEY_NAME】是否存在指定键
- 【Expire KEY_NAME TIME_IN_SECONDS】设置键的过期时间
- 【SET KEY_NAME VALUE】设置键的值
- 【GET KEY_NAME】获取键值
- 【STRLEN KEY_NAME】获取键值的长度
- 【APPEND KEY_NAME NEW_VALUE】拼接新值到旧值
- 【config set requirepass xxx】设置密码为xxx