Day24-redis


title: Day24-redis
date: 2020-08-10 16:31:44
author: 子陌


Redis

  1. 概念

    redis是一款高性能的NOSQL系列的非关系型数据库,key-value存储系统。

  2. 下载安装

    1. 官网:redis.io
    2. 中文网:redis.cn
    3. 解压可以直接使用:
      1. redis.windows.conf:配置文件
      2. redis-cli.exe:redis的客户端
      3. redis-server.exe:redis的服务器端
  3. 命令操作

    • 数据结构

      • redis存储的是:key,value格式的数据,value有五种不同的数据结构:

        1. 字符串类型String
        2. 哈希类型hash:map的格式
        3. 列表类型list:linkedlist格式
        4. 集合类型set
        5. 有序集合类型sortedset

redis数据格式

  • 具体命令操作

    1. 字符串String:存储set key value、获取get key、删除del key
    2. 哈希类型hash:存储hset mapkey key value、获取hget mapkey key、获取所有hgetall mapkey、删除hdel mapkey key
    3. 列表类型list:头/尾存储lpush/rpush key value、范围获取lrange key start end、头/尾删除lpop/rpop key
    4. 集合类型set:存储sadd key value、获取所有smembers key、删除srem key value
    5. 有序集合类型sortedset:存储zadd key score value、获取所有zrange key start end、删除zrem key value
  • 通用命令

    1. keys *:查询所有的键
    2. type key:获取键对应的value的类型
    3. del key:删除指定的key value
  1. 持久化操作

    扫描二维码关注公众号,回复: 12890379 查看本文章
    1. redis是一个内存数据库,当redis服务器重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中

    2. redis持久化机制:

      • RDB:默认方式,不需要进行配置,默认就使用这种机制

        • 在一定的间隔时间中,检测key的变化情况,然后持久化数据
        1. 编辑redis.windows.conf文件

          • save 900 1:在900秒15分钟后有一个key发生变化进行持久化
          • save 300 10:在300秒5分钟后有十个key发生变化进行持久化
          • save 60 10000:在60秒1分钟后有一万个key发生变化进行持久化
        2. 重启redis服务器,并指定配置文件名称

          • zimo> redis-server.exe redis.windows.conf
      • AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据

        1. 编辑redis.windows.conf文件
          • appendonly no(关闭AOF)–> yes 开启
          • appendfsync always:每一次操作都进行持久化
          • appendsync everysec: 每隔一秒进行一次持久化
          • appendsync no:不进行持久化
  2. 使用Java客户端操作redis

  • Jedis:一款Java操作redis数据库的工具

  • 步骤:

    • 下载jedis
    • 使用:
      1. 获取连接
      2. 操作
      3. 关闭连接
    // 1.获取连接
    Jedis jedis = new Jedis("localhost", 6379);
    // 2.操作
    jedis.set("username", "zhangsan");
    // 3.关闭连接
    jedis.close();
    
  • Java - Jedis操作

package com.zimo.jedis;

import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class JedisTest {
    
    
    @Test
    public void test1(){
    
    
        // 1.获取连接
        Jedis jedis = new Jedis("localhost", 6379); // 如果使用空参,默认值"localhost", 6379

        // 2.1操作string
        jedis.set("username", "zhangsan");
        String username = jedis.get("username");
        System.out.println(username);
        // setex()可以指定过期时间
        jedis.setex("activecode", 20, "hehe");  // 将activecode:hehe存入redis,且20秒后自动删除

        // 2.2操作hash
        jedis.hset("user", "name", "zimo");
        jedis.hset("user", "age", "23");
        jedis.hset("user", "gender", "男");
        String name = jedis.hget("user", "name");   // 获取hash中的user键中name值
        System.out.println(name);
        Map<String, String> user = jedis.hgetAll("user");// 获取hash user所有字段
        for (Map.Entry<String, String> entry : user.entrySet()) {
    
    
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }

        // 2.3操作list
        jedis.lpush("mylist", "a1","b1","c1");  // 从左边存
        jedis.rpush("mylist", "a2","b2","c2");  // 从右边存
        List<String> mylist = jedis.lrange("mylist", 0, -1);// 范围获取:-1代表所有
        System.out.println(mylist.toString());
        jedis.lpop("mylist");   // 左边弹出
        jedis.rpop("mylist");   // 右边弹出
        List<String> lrange = jedis.lrange("mylist", 0, -1);
        System.out.println(lrange);

        // 2.4操作set
        jedis.sadd("myset", "java","php","c++");    // set存储
        Set<String> myset = jedis.smembers("myset");    // 获取所有
        System.out.println(myset);

        // 2.5操作sortedset
        jedis.zadd("mysortset", 3, "亚瑟");    // set存储
        jedis.zadd("mysortset", 20, "后羿");
        jedis.zadd("mysortset", 25, "孙悟空");
        Set<String> mysortset = jedis.zrange("mysortset", 0 , -1);    // 获取所有
        System.out.println(mysortset);

        // 3.关闭连接
        jedis.close();
    }
}
  • Jedis连接池:JedisPool
    • 使用:
      1. 创建JedisPool连接池对象
      2. 调用方法getResource
// 0.创建一个配置对象
// 可以使用自定义配置加载连接池对象new JedisPool(new JedisPoolConfig(), "localhost", 6379);
// 1.创建jedis连接池对象
JedisPool jedisPool = new JedisPool();
// 2.获取连接
Jedis resource = jedisPool.getResource();
// 3.使用
resource.set("hehe", "haha");
// 4.关闭,归还到连接池
resource.close();
  • 注意:使用redis缓存一些不经常发生变化的数据
    • 数据库的值一旦发生改变,则需要更新缓存
    • 数据库的表执行增删改的相关操作,需要将redis缓存数去情况,再次存入

猜你喜欢

转载自blog.csdn.net/qq_38205875/article/details/109100430