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的工具
基本使用步骤
- 下载并导入
Jedis
的jar包 - 创建
Jedis
对象
Jedis构造函数
Jedis(host,port);
host:String,主机地址
port:int,端口号
若使用空参构造,则默认值为
"localhost",6379
Jedis jedis = new Jedis("localhost",6379);
- 操作Redis
jedis.set("username","name");
- 关闭连接
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
使用步骤
- 创建
JedisPool
连接池对象
JedisPool jedisPool = new JedisPool();
- 调用
getResource()
方法获取Jedis连接
Jedis jedis = jedisPool.getResource();
- 使用Jedis对象
jedis.set("username","name");
- 关闭连接,将连接归还到连接池中
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();
}
}
评论