菜单

redis复习

duckflew
发布于 2020-09-22 / 271 阅读
0
1

redis复习

下载安装

官网 官网只提供了linux版本的

windows版本的需要去github下载

github地址:

解压可以直接使用

  • redis.windows.conf :配置文件
  • redis-cli.exe :redis的客户端
  • redis-server.exe :redis服务器

命令操作

1.redis的数据结构

redis存储的是:key value键值对 key是字符串 value有五种不同数据类型

  • 字符串类型:string

  • 哈希类型 hash: map格式

  • 列表类型 list:相当于java的linklist格式

  • 集合类型 set: 相当于java的hashset

  • 有序集合类型 :sortedset 存进去自动排序

2.基本命令(详细的命令在redis中文网教程)

  • string

    • 存储 : set key value
    • 获取 :get key
    • 删除 : del key
  • hash

    • 存储: hset key filed value
      • exp:hset myhash username lisi
    • 获取 :hget key field
      • exp: hget myhash username
      • exp:hgetall myhash (获取所有)
    • 删除 : hdel key field [field …]
      • exp:hdel myhash username
  • lis–可以选择从列表的头部或者是尾部添加数据

    • 存储:lpush key value [value …] / rpush key value [value …]
    • 获取:
      • 范围获取: lrange start end
    • 删除
      • lpop key : 删除列表最左边的元素
      • rpop key : 删除列表最右边的函数
  • set (不保证存进去的顺序)

    • 存储 : sadd key member [member …]
    • 获取集合所有元素: smembers key
    • 删除 : srem key member [member …]
  • sortedset

    • 存储: zadd key [NX|XX] [CH] [INCR] score member [score member …]

      • exp: zadd mysort 60 zhangsan 999 wangwu 147 lisi
    • 获取 : zrange key start end

      • exp:zrange mysort 0 -1(全部获取)

        得到的结果是

        1) "zhangsan"
        2) "lisi"
        3) "wangwu"
        
    • zrem key value

      • exp: zrem mysort lisi

        再次查询得到

        (integer) 1
        1) "zhangsan"
        2) "wangwu"
        
  • keys pattern 查询某个键

    pattern可以是正则表达式

    exp:

    127.0.0.1:6379> keys djklasjdlasdj
    (empty list or set)
    127.0.0.1:6379> keys *
    1) "mysort"
    2) "username"
    3) "a"
    4) "mylist"
    5) "myset"
    

持久化

redis是内存数据库 当服务器重启 数据会丢失 可以将redis的数据持久化到硬盘文件中

持久化机制:

  • RDB:

    默认方式 不需要进行配置 默认就使用这种机制 在一定的时间间隔内 检测key的变化情况 然后持久化数据到一个后缀名为rdb的文件中

    使用步骤如下

    1. 编辑redis.windows,conf文件

      文件中有一段配置如下

      save 900 1
      save 300 10
      save 60 10000
      

      解释如下 在如下的三种情况下都会持久化一次

      after 900 sec (15 min) if at least 1 key changed
      after 300 sec (5 min) if at least 10 keys changed
      after 60 sec if at least 10000 keys changed

    2. 重新启动redis服务器 并且指定 配置文件名称 指定方法是在安装路径下用命令行启动 在后面添加参数

      D:\Program Files\Redis-x64-3.2.100>redis-server.exe redis.windows.conf
      
  • AOF:

    日志记录的方式 可以记录每一条命令的操作 可以每一次命令操作后 持久化数据到一个aof文件

    1. 编辑配置文件

      修改appendonly no这一项 默认代表的AOF关闭

      修改成 yes 开启AOF

      2.开启后有三个配置可以设置

      appendfsync everysec --每隔一秒进行一次持久化
      appendfsync always	 --每一次操作都进行持久化
      appendfsync no 		 --不进行持久化	
      

      3.指定配置文件重启服务器 同上

Jedis

java操作redis数据库的工具

依赖
<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.3.0</version>
        </dependency>
使用
  1. 创建JedisPool连接池对象

  2. 调用方法 getResource() 方法获取Jedis连接

    ​ 默认配置

                /**
                 * 测试jedis连接池
                 */
                JedisPool jedisPool=new JedisPool();
                //默认配置
                Jedis jedis = jedisPool.getResource();
                jedis.set("source","连接池设置成功");
                jedis.close();

​ 手动配置

 /**
         * 测试jedis连接池
         */
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(50);
        jedisPoolConfig.setMaxIdle(10);//最大空闲连接
        JedisPool jedisPool=new JedisPool(jedisPoolConfig);
        Jedis jedis = jedisPool.getResource();
        jedis.set("source","hha" );
        jedis.close();

​ 运行效果

127.0.0.1:6379> get source
"hha"

手写工具类

public class JedisPoolUtils {

                private static  JedisPool jedisPool;
                static
                {
                    /**
                     * 类加载器加载配置文件
                     */
                    InputStream inputStream = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
                    //定义properties对象
                    Properties properties=new Properties();
                    try {
                        //加载获取到的配置文件的输入流
                        properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取数据  设置到jedis的poolconfig中
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
        jedisPoolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
        jedisPool=new JedisPool(jedisPoolConfig,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
    }
    public static Jedis getJedis()
    {
        return jedisPool.getResource();
    }
}

测试

Jedis jedis = JedisPoolUtils.getJedis();
        Set<String> keys = jedis.keys("*");
        for (String key:keys) System.out.println(key);

效果如下

a
mysort
mylist
myset
username

评论