Redis基础与运用

一、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引入

    org.springframework.boot
    spring-boot-starter-web


    org.apache.commons
    commons-pool2


    redis.clients
    jedis


    com.alibaba
    fastjson
    2.0.32


    org.springframework.boot
    spring-boot-starter-data-redis

  • 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 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 jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        RedisTemplate 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 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

你可能感兴趣的:(redis,数据库,缓存)