blog
原创

JavaWeb学习笔记——Redis

Redis

Redis是一款高性能的NOSQL系列的非关系型数据库

Redis简介

Redis是使用C语言开发的开源的高性能键值对数据库,Redis通过提供多种键值数据类型来适应不同场景下的存储需求

Redis的应用场景

  • 缓存
  • 好友在线列表
  • 任务队列
  • 排行榜
  • 网站访问统计
  • 数据过期处理
  • 分布式集群框架中的session分离

关系型数据库与非关系型数据库

关系型数据库的数据之间存在关联关系,数据存储在硬盘的文件上

非关系型数据库的数据没有关联关系,数据存储在内存之中

关系型数据库NoSQL数据库是互补关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL关系型数据库的不足进行弥补,一般会将数据存储在关系型数据库中,在NoSQL数据库中备份存储关系型数据库的数据

Redis下载安装

https://github.com/tporadowski/redis/releases下载对应操作系统的版本,解压即可

常用的文件

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

Redis的数据结构与命令操作

Redis存储的值键值对(key,value)格式的数据,其中key为字符串格式,而value有5种格式

字符串类型 string

存储数据

set key value

获取数据

get key

删除数据

del key

哈希类型 hash

存储数据

hset key field value 如 hset class cno 1

获取数据

hget key field 如 hget class cno

获取全部数据

hgetall key 如 hgetall class

删除数据

hdel key field 如 hdel class cno

列表类型 list

简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部或尾部,可以存在相同元素

添加数据

lpush key value:将元素添加到列表左边

rpush key value:将元素添加到列表右边

获取数据

lrange key start end:范围获取

lrange list 1 2

删除数据

lpop key:删除列表最左边的元素,并返回该元素

rpop key:删除列表最右边的元素,并返回该元素

集合类型 set

不允许存在相同元素

存储数据

sadd key value

获取数据

smembers key:获取set集合中的所有元素

删除数据

srem key value

有序集合类型 sortedset

不允许存在相同元素,通过一个分数score来实现元素的排序

存储数据

zadd key score value

获取数据

zrange key start end

删除数据

zrem key value

Redis通用命令

命令 描述
keys * 获取所有键名
type key 获取指定键对应值的类型
del key 删除指定的键值对

Redis持久化

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
#	在x秒之后如果有至少y个键被改变,则持久化数据
save x y

使用命令行重新启动Redis服务器并指定配置文件

D:\Redis-x64-5.0.9>redis-server.exe redis.windows.conf
AOF

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

编辑redis.windows.conf文件,找到appendonly no,并把no更改为yes来开启AOF

通过appendfsync设置持久化的模式

  • appendfsync always :每一次操作都进行持久化

  • appendfsync everysec:每隔一秒进行一次持久化

  • appendfsync no:不进行持久化

Jedis

Jedis是一个Java操作Redis的工具

基本使用步骤

  1. 下载并导入Jedis的jar包
  2. 创建Jedis对象

Jedis构造函数

Jedis(host,port);

host:String,主机地址

port:int,端口号

若使用空参构造,则默认值为"localhost",6379

Jedis jedis = new Jedis("localhost",6379);
  1. 操作Redis
jedis.set("username","name");
  1. 关闭连接
jedis.close();

Jedis操作Redis各种数据结构

Jedis操作Redis与Redis的命令操作相同,在Java中存在与命令相同的方法

字符串类型 String

// 存储数据
jedis.set("username","name");
// 获取数据
String username = jedis.get("username");
System.out.println(username);
// 删除数据
jedis.del("username");

使用setex()方法可以存储指定过期时间的键值对

jedis.setex("key",10,"value"); // 10秒后 key-value 键值对将会过期并删除

哈希类型 hash

// 存储hash数据
jedis.hset("student","sno","01");
jedis.hset("student","name","AA");
jedis.hset("student","sex","F");

// 获取数据
String sno = jedis.hget("student", "sno");
Map<String, String> student = jedis.hgetAll("student"); // 获取对应键的全部数据
      
// 删除数据
jedis.hdel("student","sno");

列表类型 list

// 存储数据
jedis.lpush("list","a","b");   // 在列表头插入数据
jedis.rpush("list","c"); 	   // 在列表尾插入数据

// 查询数据
List<String> list = jedis.lrange("list", 0, -1); // 0 到 -1 为查询所有数据
System.out.println(list);

// 删除数据
String lpop = jedis.lpop("list"); // 从列表头部删除值并返回被删除的值
System.out.println(lpop);

集合类型 set

// 存储数据
jedis.sadd("set","a","b","c","d");

// 查询set中所有数据
Set<String> set = jedis.smembers("set");
System.out.println(set);

// 删除数据
jedis.srem("set","a");

有序集合类型 sortedset

// 存储sortedset数据
jedis.zadd("sort",3,"a");
jedis.zadd("sort",1,"b");
jedis.zadd("sort",2,"c");

// 查询数据
Set<String> sort = jedis.zrange("sort", 0, -1); // 范围 0 到 -1 查询所有数据
System.out.println(sort);

// 删除数据
jedis.zrem("sort","a");      

Jedis连接池 JedisPool

使用步骤

  1. 创建JedisPool连接池对象
JedisPool jedisPool = new JedisPool();
  1. 调用getResource()方法获取Jedis连接
Jedis jedis = jedisPool.getResource();
  1. 使用Jedis对象
jedis.set("username","name");
  1. 关闭连接,将连接归还到连接池中
jedis.close();
public class JedisTest {
    @Test
    public void test () {
        // 创建Jedis连接池对象
        JedisPool jedisPool = new JedisPool();
        // 获取连接
        Jedis jedis = jedisPool.getResource();
        // 使用Jedis对象
        jedis.set("username","name");
        // 关闭连接
        jedis.close();
    }
}
Redis
Java Web
  • 作者:Melonico
  • 发表时间:2021-03-15 17:55
  • 更新时间:2021-03-15 17:55

评论

暂无评论,快来发表第一个评论吧!
留言
TOP