Skip to content

redis

一、redis概述

1、redis

redis:一款高性能的NOSQL系列的非关系型数据库redis

2、NoSQL

NoSQL:泛指非关系型的数据库

NOSQL分类:

  1. 键值(Key-Value)存储数据库:内容缓存,主要用于处理大量数据的高访问负载
  2. 列存储数据库:分布式的文件系统
  3. 文档型数据库:Web应用
  4. 图形(Graph)数据库:社交网络

3、下载安装

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

二、redis数据结构

key:字符串

value:

  1. 字符串类型 string
  2. 哈希类型 hash:map格式
  3. 列表类型 list :linkedlist格式,支持重复元素
  4. 集合类型 set :不允许重复元素
  5. 有序集合类型 sortedset:不允许重复元素,且元素有序

三、redis命令

类型存储获取删除
stringset key valueget keydel key
hashhset key field valuehget key field
hgetall key
lrange start end
hdel key field
listlpush key value
rpush key value
lrange key start endlpop key
rpop key
setsadd key valuesmembers keysrem key value
sortedsetzadd key score valuezrange key start end [withscores]zrem key value
  1. keys * :查询所有的键
  2. type key :获取键对应的value的类型
  3. del key:删除指定的key value

四、redis持久化

1、redis持久化概述

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

2、RDB

  1. 默认方式,不需要进行配置,默认就使用这种机制

  2. 在一定的间隔时间中,检测key的变化情况,然后持久化数据

  3. 修改配置

    1. 编辑redis.windwos.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
    2. 重新启动redis服务器,并指定配置文件名称

      >redis-server.exe redis.windows.conf

3、AOF

  1. 日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据

  2. 配置

    1. 编辑redis.windwos.conf文件

      ppendonly no(关闭aof) --> appendonly yes (开启aof)
      
      ## appendfsync always : 每一次操作都进行持久化
      appendfsync everysec : 每隔一秒进行一次持久化
      ## appendfsync no	 : 不进行持久化
    2. 重新启动redis服务器,并指定配置文件名称

      >redis-server.exe redis.windows.conf

五、Jadis

1、Jadis概述

Jadis:java操作redis数据库的工具

2、下载使用

下载并导入jedis的jar包

java
//1. 获取连接
Jedis jedis = new Jedis("localhost",6379);
//2. 操作
jedis.set("username","zhangsan");
//3. 关闭连接
jedis.close();

3、操作redis

1)string

java
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
//存储
jedis.set("username","zhangsan");
//获取
String username = jedis.get("username");
System.out.println(username);

//可以使用setex()方法存储可以指定过期时间的 key value
jedis.setex("activecode",20,"hehe");
//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对

//3. 关闭连接
jedis.close();

2)hash

java
//1. 获取连接
Jedis jedis = new Jedis();

//2. 操作
//2.1 存储hash
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
jedis.hset("user","gender","female");
//2.2 获取hash
String name = jedis.hget("user", "name");
System.out.println(name);
//2.3 获取hash的所有map中的数据
Map<String, String> user = jedis.hgetAll("user");

//3. 关闭连接
jedis.close();

3)list

java
//1. 获取连接
Jedis jedis = new Jedis();

//2. 操作
//2.1 list 存储
jedis.lpush("mylist","a","b","c");//从左边存
jedis.rpush("mylist","a","b","c");//从右边存
//2.2 list 范围获取
List<String> mylist = jedis.lrange("mylist", 0, -1);
//2.3 list 弹出
String element1 = jedis.lpop("mylist");//c
String element2 = jedis.rpop("mylist");//c
//2.4 list 范围获取
List<String> mylist2 = jedis.lrange("mylist", 0, -1);

//3. 关闭连接
jedis.close();

4)set

java
//1. 获取连接
Jedis jedis = new Jedis();

//2. 操作
//2.1 set 存储
jedis.sadd("myset","java","php","c++");
//2.2 set 获取
Set<String> myset = jedis.smembers("myset");

//3. 关闭连接
jedis.close();

5)sortedset

java
//1. 获取连接
Jedis jedis = new Jedis();

//2. 操作
//2.1 sortedset 存储
jedis.zadd("mysortedset",3,"亚瑟");
jedis.zadd("mysortedset",30,"后裔");
jedis.zadd("mysortedset",55,"孙悟空");
//2.2 sortedset 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);

//3. 关闭连接
jedis.close();

4、jedis连接池

jedis连接池:JedisPool

java
//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("hehe","heihei");

//4. 关闭 归还到连接池中
jedis.close();

5、连接池工具类

java
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();
    }
}

Released under the MIT License.