Redis

一、快速入门

(一)简介

Redis是一个基于内存的key-value结构数据库。

  • 基于内存存储,读写性能高
  • 适合存储热点数据(短时间大量用户来访问读取的数据)
  • 存储的value类型丰富(下面要说的数据类型)
  • 结构化的NoSQL
  • NoSQL:非关系型数据库(没有表的概念,用键值对存储;数据和数据之间没有联系),非关系型用于对关系型数据的补充

Redis应用场景

  • 缓存
  • 消息队列
  • 任务队列
  • 分布式锁

(二)下载与安装

Windows下载地址
Linux下载地址
5.0以上windows下载

(1)Linux安装

  1. tar -zxvf 包名 -C /usr/local
  2. Redis依赖环境gccyum install gcc-c++
  3. cd /usr/local/redis-4.0.0,然后编译make
  4. 进入redis的src目录,进行安装make install

(三)启动与停止服务

(1)Linux下

  1. 进入redis的src目录,执行./redis-server
  2. 后台启动Redis,修改配置文件(redis根目录下)vim redis.conf
    daemonize no修改为daemonize yes
  3. 目前在redis根目录,执行src/redis-server ./redis.conf
  4. 默认无密码登录,如需要设置密码,在配置文件
    requirepass 密码将此行取消注释
    之后连接Redis后,使用auth 密码登录
  5. 连接远程Redissrc/redis-cli -h 地址 -p 6379 -a 密码
  6. redis默认拒绝远程连接,需修改配置文件,将bind 127.0.0.1注释起来(默认没注释)

(2)Windows下

redis-server.exe表示服务端
redis-cli.exe表示客户端

Windows下修改了配置文件,需要cmd命令启动指定配置文件.\redis-server.exe .\redis.windows.conf

二、数据类型

Redis存储的是key-value结构数据,其中key是字符串类型,value有5种常用数据类型。
在这里插入图片描述

三、常用命令

更多Redis命令

(1)字符串String

  1. SET key value设置指定key的值,eg:set name zhangsan
  2. GET key根据key获取值
  3. SETEX key seconds value设置指定key的值,并将key的过期时间设置为seconds秒(这个key-value多久过期)
  4. SETNX key value只有key不存在时设置key的value(即当key有对应value后,不允许再被修改,常用于分布式锁)

(2)哈希Hash

在这里插入图片描述

(3)列表List

在这里插入图片描述

(4)集合Set

在这里插入图片描述

(5)有序集合Sorted Set

在这里插入图片描述

(6)通用命令

在这里插入图片描述

四、Java操作Redis

(一)介绍

在这里插入图片描述

(二)Jedis

在这里插入图片描述
在这里插入图片描述

(三)Spring Data Redis

在这里插入图片描述

  1. 导入坐标
    在这里插入图片描述

  2. 配置文件 (注意:password: ”123456“,密码要用双引号括起来)
    在这里插入图片描述

  3. RedisConfig,用于修改Spring data redis默认的序列化方式
    RedisTemplate和StringRedisTemplate的区别
    A. 在java中使用RedisTemplate操作Redis时,所有的键值对都会在Redis上进行序列化和反序列化(比如set “name” “hhh”,name就会变为"\34\32\0x\name"这种序列化内容,在Redis的客户端get name时就get不到),其实全在java中操作数据,这种序列化也不影响(因为get时会反序列化),只是在Redis客户端get不到。
    B. 对于上面这个问题,有如下两种解决办法
    C. 第一种,使用StringRedisTemplate,直接自动装配即可
    D. 第二种,使用RedisTemplate,然后提供一个RedisConfig,内容如下所示

//RedisConfig
/**
 * 修改Spring Data Redis默认的序列化方式
 */
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的key序列化器为:JdkSerializationRedisSerializer,我们修改为StringRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(redisConnectionFactory);

        return redisTemplate;
    }
}

(1)String方法

    /**
     * String
     */
    @Test
    public void testString() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name", "zhangsan");
        valueOperations.get("name");
    }

(2)Hash方法

    /**
     * Hash
     */
    @Test
    public void testHash() {
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("001", "name", "zhangsan");
        hashOperations.put("001", "age", "19");

        String name = (String) hashOperations.get("001", "name");
        //获取所有key
        Set keys = hashOperations.keys("001");
        //获取所有value
        List values = hashOperations.values("001");
    }

(3)List方法

    /**
     * List
     */
    @Test
    public void testList() {
        ListOperations listOperations = redisTemplate.opsForList();
        //left表示左边,即插入到列表头部
        listOperations.leftPush("list", "a");
        //一次性插入多个
        listOperations.leftPushAll("list", "a", "b", "c");
        //取值
        listOperations.range("list", 0, -1);
        //获取列表长度,对应命令LLEN key
        listOperations.size("list");
    }

(4)Set方法

    /**
     * Set
     */
    @Test
    public void testSet() {
        SetOperations setOperations = redisTemplate.opsForSet();
        //存值
        setOperations.add("set", "a", "b", "c", "d");
        //取值
        Set set = setOperations.members("set");
        //删除
        setOperations.remove("set", "a", "c");
    }

(5)Sorted Set方法

    /**
     * Sorted Set
     */
    @Test
    public void testSortedSet() {
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //存值
        zSetOperations.add("ss", "a", 10.0);
        zSetOperations.add("ss", "b", 9.0);
        zSetOperations.add("ss", "c", 8.0);
        //取值
        Set<String> ss = zSetOperations.range("ss", 0, -1);
        //修改分数,b+1
        zSetOperations.incrementScore("ss", "b", 1.0);
        //删除
        zSetOperations.remove("ss", "a", "b");
    }

(6)通用方法

    /**
     * 通用方法
     */
    @Test
    public void testCommon() {
        //查看所有Key
        redisTemplate.keys("*");
        //目标key是否存在
        redisTemplate.hasKey("keyName");
        //key值的类型
        redisTemplate.type("keyName");
        //key TTL时间
        redisTemplate.getExpire("keyName");
        //删除key
        redisTemplate.delete("keyName");
    }

五、Redis进阶

(一)Redis缓存更新策略

在这里插入图片描述
主动更新的实现方式:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值