redis简讲

概念

  • redis是一款高性能的NOSQL系列的非关系型数据库
  • 在这里插入图片描述

下载安装

  1. 官网

    • https://redis.io/
    • https://www.redis.net.cn/
  2. 解压直接可以使用

    • 文件名说明
      redis.windows.conf配置文件
      redis-cli.exeredis的客户端
      redis-server.exeredis服务端

命令操作

数据结构

  • redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据格式

value的数据格式

  • 格式类型
    string字符串类型
    hash:map格式哈希类型
    list:linkedList格式列表类型
    set:hashSet格式集合类型
    sortedset有序集合类型
  • 在这里插入图片描述

字符串类型 string
格式操作
set key value存储
get key获取
del key删除
哈希类型 hash
格式操作
hset key field value存储
hget key field获取指定field
hgetall key获取所有的field 和 value
hdel key field删除

在这里插入图片描述

列表类型 list
  • 可以添加一个元素到列表的头部(左边)或者尾部(右边)
格式操作
添加
lposh key value将元素加入列表左表
rpush key value将元素加入列表右边
获取
lrange key strat end范围获取
删除
lpop key删除列表最左边的元素,并将元素返回
rpop key删除列表最右边的元素,并将元素返回

在这里插入图片描述

集合类型 set
  • 不允许有重复元素
格式操作
sadd key value存储
smembers key获取set集合中所有元素
srem key value删除set集合中的某个元素

在这里插入图片描述

有序集合类型 sortedset
  • 不允许重复元素,且元素有序
格式操作
zadd key score value存储
zrange key start end获取所有value
zrange key start end withscores获取所有value和score
zrem key value删除

在这里插入图片描述

通用命令
命令说明
keys *查询所有的键
type key查看该键的类型
del key删除指定key value

在这里插入图片描述

持久化操作

  • redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失
  • 我们可以将redis内存中的数据持久化保存到硬盘的文件中

redis持久化机制

RDB

  • 默认方式,不需要进行配置,默认就使用这种机制
    • 在一定的间隔时间中,检测Key的变化情况,然后持久化数据
    • 编辑redis.windows.conf文件
      • after 900 sec (15 min) if at least 1 key changed
      • save 900 1
      • after 300 sec (5 min) if at least 10 keys changed
      • save 300 10
      • after 60 sec if at least 10000 keys changed
      • save 60 10000
    • 重新启动redis服务器,并制定配置文件名称
      • F:\Redis>redis-server.exe redis.windows.conf

AOF

  • 日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
    • 编辑redis.windows.conf文件
      • appendonly no(关闭aof) --> appendonly yes(开启aof)
      • appendfsync always : 每一次操作都进行持久化
      • appendfsync everysec :每隔一秒进行一次持久化
      • appendfsync no :不进行持久化

Java客户端Jedis

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

使用步骤

  1. 下载jedis的jar包或导入依赖

    • <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>2.7.1</version><!--版本号可根据实际情况填写-->
      </dependency>
      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>3.3.2</version> <!--版本号可根据实际情况填写-->
      </dependency>
      
  2. 使用

  • 测试是否连接

  • package com.ytzkl.jedis.test;
    
    import org.junit.Test;
    import redis.clients.jedis.Jedis;
    
    /**
     * @author 玫瑰到了花期
     * @data 2022/4/23 16:09
     * @love 又偷偷看你了
     * @V: CBWR-K
     */
    public class JedisTest1 {
        @Test
        public void test1(){
            //1.获取连接
            Jedis jedis = new Jedis("localhost",6379);
            //2.操作
            jedis.set("username","zhangsan");
            //3.关闭连接
            jedis.close();
        }
    }
    

Jedis操作各种redis中的数据结构

字符串类型 string

方法说明
set(key,value)存储
get(key)获取
setex(key,seconds,value)将key:value键值对存入redis,seconds秒后自动删除
del(key)删除
@Test
public void string(){
    //1.获取连接,如果空参,默认为6379
    Jedis jedis = new Jedis();
    //2.操作
    //储存
    jedis.set("username","zhangsan");
    //获取
    String username = jedis.get("username");
    System.out.println(username);
    //可以使用setex()方法储存可以指定过期时间的 key value
    //将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
    jedis.setex("activecode",20,"hehe");
    //删除
    jedis.del("username");
    String username1 = jedis.get("username");
    System.out.println(username1);
    //3.关闭连接
    jedis.close();
}

哈希类型 hash : map格式

方法说明
hset(key,field,value)存储
hget(key,field)获取单个指定值
hgetAll(key)获取该键对应的所有值
jedis.hdel(key,field)删除指定field
@Test
public void hash(){
    //1.获取连接,如果空参,默认为6379
    Jedis jedis = new Jedis();
    //2.操作
    //储存
    jedis.hset("user","name","yi");
    jedis.hset("user","age","18");
    jedis.hset("user","sex","girl");
    //获取
    String name = jedis.hget("user", "name");
    System.out.println(name);
    Map<String, String> map = jedis.hgetAll("user");
    Set<String> keySet = map.keySet();
    for (String key:keySet){
        String value = map.get(key);
        System.out.println(key+":"+value);
    }
    //删除
    jedis.hdel("user","name");
    //3.关闭连接
    jedis.close();
}

列表类型 list :linkedList格式。支持重复元素

方法说明
lpush(key,strings)从左边存
rpush(key,strings)从右边存
lrange(key,start,end)范围获取
lpop(key)从左边删
rpop(key)从右边删
@Test
public void list(){
    //1.获取连接,如果空参,默认为6379
    Jedis jedis = new Jedis();
    //2.操作
    //储存
    jedis.lpush("list1","a","b","c");//从左边存
    jedis.rpush("list1","a","b","c");//从右边存
    //删除
    jedis.lpop("list1");//从左边删
    jedis.rpop("list1");//从右边删
    //获取
    List<String> list1 = jedis.lrange("list1", 0, -1);
    System.out.println(list1);
    //3.关闭连接
    jedis.close();
}

集合类型 set :不允许重复元素

方法说明
sadd(key value)存储
smembers(key)获取set集合中所有元素
srem(key value)删除set集合中的某个元素
@Test
public void set(){
    //1.获取连接,如果空参,默认为6379
    Jedis jedis = new Jedis();
    //2.操作
    //储存
    jedis.sadd("mySet","java","oop","ssm");
    //删除
    jedis.srem("mySet","java");
    //获取
    Set<String> mySet = jedis.smembers("mySet");
    for (String key:mySet){
        System.out.println(key);
    }
    //3.关闭连接
    jedis.close();
}

有序集合类型 sortedset :不允许重复元素,切元素有顺序

方法说明该
zadd (key score value)存储
zrange (key start end)获取所有value
zrem (key value)删除
@Test
public void sortedset  (){
    //1.获取连接,如果空参,默认为6379
    Jedis jedis = new Jedis();
    //2.操作
    //储存
    jedis.zadd("mySortedset",18,"yiyi");
    jedis.zadd("mySortedset",19,"gexiao");
    jedis.zadd("mySortedset",10,"chaochao");
    //删除
    jedis.zrem("mySortedset","chaochao");
    //获取
    Set<String> mySortedset = jedis.zrange("mySortedset", 0, -1);
    for (String key:mySortedset){
        System.out.println(key);
    }
    //3.关闭连接
    jedis.close();
}

jedis连接池:JedisPool

使用

  1. 创建JedisPool连接池对象
  2. 调用方法getResource()方法获取Jedis链接
@Test
public void 连接池(){
    //0.创建一个配置对象
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(50);
    config.setMaxIdle(10);
    //1.创建Jedis连接池对象
    JedisPool jedisPool = new JedisPool(config,"localhost",6379);
    //2.获取链接
    Jedis jedis = jedisPool.getResource();
    //3.使用
    jedis.set("username","yiya");
    //4.关闭 归还到连接池中
    jedis.close();
}

Jedis工具类

  • 加载配置文件,配置连接池的参数
  • 提供获取链接的方法

JedisUtils

package com.ytzkl.jedis.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * @author 玫瑰到了花期
 * @data 2022/4/23 17:12
 * @love 又偷偷看你了
 * @V: CBWR-K
 */
public class JedisPoolUtils {
    private static JedisPool jedisPool;
    static {
        //读取配置文件
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        //创建Properties对象
        Properties pro = new Properties();
        //关联文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取数据,设置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
        //初始化JedisPool
        jedisPool = new JedisPool(config,pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));

    }
    /**获取链接的方法*/
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}
@Test
public void 使用连接池工具类(){
    //通过连接池工具类获取
    Jedis jedis = JedisPoolUtils.getJedis();
    //使用
    jedis.set("love","花花");
    jedis.set("live","yang");
    //关闭,归还到连接池中
    jedis.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值