未启动redis时,代码处理方式。(redis常用命令,持久化小解,jedis工具类)

概念理解

官网:https://redis.io
中文网:http://www.redis.net.cn

  • redis.windows.conf:配置文件
  • redis-cli.exe:redis客户端
  • redis-server.exe:redis服务器端
    redis
    redis是一款高性能的NOSQL系列的非关系型数据库。not only sql 不仅仅是sql。具体的概念百度很多。开源的,c语言开发的,键值对数据库(key-value)有着极高的并发读写性能。·

我的理解

目前我理解到的就是提高用户的体验度,可以将一些数据首次访问时,从数据库中获取,同时用Jedis将数据存储到redis中,这样,查询从缓存中查询数据的速度比从数据库中查询数据的速度要快很多。redis有两种持久化的方式,默认方式的性能优于第二种(下文f详解)。

存储数据类型

目前redis支持五种键值对。命令均为常用,其它另行百度

字符串类型 string :set key value ;get key ;del key。

哈希 hash :hset key field value;hget key field;hgetall key;hdel key field

列表 list:l®push key value;lrange key 0 -1;l®pop key。

集合 set :sadd key value;smembers key;srem key value。

有序集合 sortedset :zadd key score value;

zrange key start end [withscores];zrem key value。

通用命令

keys *获取所有的键;type keyname 获取value类型;del keyname 删除指定的key。

reids持久化方式

RDB

在redis.windows.conf文件中有这样的一段代码(默认持久化,最好不要随意修改)

配置文件
解释(在一下条件中,有一个满足了,就会持久化到dump.rdb文件中)
在这里插入图片描述

AOF

并不太建议使用,消耗性能。
日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
编辑redis.windwos.conf文件

appendonly no(关闭aof) --> appendonly yes (开启aof)

#appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每隔一秒进行一次持久化
#appendfsync no : 不进行持久化
配置文件

持久化到硬盘的文件

(写在前面,之前在考了朋友的redis,keys * 一直有数据,等待默认时间,也不会修改,每次启动都有,由于自己对redis持久化理解不透彻,所以直接找到.rdb文件删除,从而使redis不在读取此文件)
默认rdb文件存放路径是当前目录,文件名是:dump.rdb。可以在配置文件中修改路径和文件名,分别是dir和dbfilename
在配置文件中,可以修改持久化文件的文件名和存储路径。
配置文件

jedis工具类

原代码

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.Properties;

/**
 * 提供一个Redis连接
 */
public class JedisUtils {
    private static JedisPool jedisPool;
    private JedisUtils(){}
    static{
        try{
            /*将配置文件中的数据读取到集合中*/
            Properties properties = new Properties();
            properties.load(JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties"));
            String host = properties.getProperty("host");
            String port = properties.getProperty("port");
            String maxTotal = properties.getProperty("maxTotal");
            String maxIdle = properties.getProperty("maxIdle");
            /*根据配置文件信息初始化连接池*/
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxIdle(Integer.parseInt(maxIdle));
            config.setMaxTotal(Integer.parseInt(maxTotal));

           jedisPool = new JedisPool(config,host,Integer.parseInt(port));
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public static Jedis getJedis(){
        return jedisPool.getResource();
    }

    public static void main(String[] args) {
        System.out.println(getJedis());
    }
}

当redis服务器没有启动时,代码处理方式
import java.util.List;

public class CategoryServiceImpl implements ICategoryService {
    private CategoryDaoImpl categoryDao = new CategoryDaoImpl();

    @Override
    public List<Category> findAll() throws Exception {
        Jedis jedis = null;
        String category = null;
        List<Category> list = null;
        try {
            jedis = JedisUtils.getJedis();
            category = jedis.get("category");
            jedis.close();
        } catch (Exception e) {
            e.printStackTrace();

        }
        if (category == null) {
            list = categoryDao.findAll();
            System.out.println("正在从数据库查询数据... ...");
            if (jedis != null) {
                jedis.set("category", new ObjectMapper().writeValueAsString(list));

            }
        } else {

            list = new ObjectMapper().readValue(category, List.class);

            System.out.println("正在从缓存中查询数据.. ..");
        }

        return list;
    }
}

处理方法

先将jedis放到成员变量中,再try…catch…如果没有启动直接讲错误发送到控制台。从数据库获取数据后还要将数据存入redis中,所以的三个红框的作用,还是再次通过判断jedis是否不为空(有地址值),来确定redis服务器是否正常启动。

方法
第一个篮框:将指定数据类型转换为json数据存入到reids中。
第二个篮框:将redis中json数据读取成指定数据类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河西彭于晏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值