Redis是NoSQL数据库
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis支持的数据类型
string 、hash、list、set、zset
redis事务
redis的事务用multi开启, 没提交一次加入队列等待执行,只有当执行exec命令时才会将所有的队列信息一次提交。
redis事务不同于mysql,redis不支持事务回滚。
redis乐观锁
由于redis不支持事务回滚所以提出了乐观锁解决方案。
1. 乐观锁的实现,必须基于WATCH,然后利用redis的事务。
2. WATCH生命周期,只是和事务关联的,一个事务执行完毕,相应的watch的生命周期即结束。
Redis持久化机制 两种方式RDB 和AOF。
RDB是将内存中的数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置动作快照持久化的方式,我们可以配置redis在n秒内如果超过m个key修改就自动做快照(redis默认的方式)
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内如果超过10个key被修改,则发起快照保存
save 60 10000 #60秒内如果超过10000个key被修改,则发起快照保存
缺点:由于快照方式是在一定间隔时间做一次的保存,如果redis宕机的话,就会丢失最后一次的快照后的所有修改
AOF 比RDB方式有更好的持久化性,使用aof,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上,这样aof方式的持久化有可能会丢失数据。
解决方案:可以通过配置文件(redis.windows.config)告诉redis我们要通过fsync函数强制os写入到磁盘的时机
appendonly yes //启用 aof 持久化方式(redis默认是NO)
appendfsync always //收到命令就立即写入磁盘,最慢,保证完全的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
appendfsyc no //完全依赖os 性能好 持久化没保障
虚拟内存配置
vm-enabled yes #开启vm功能
vm-swap-file /tmp/redis.swap #交互回来的value保存的文件路径
vm-max-memory 1000000 #redis使用的最大内存上限
vm-page-size 32 #每个页面的大小32字节
vm-pages 134217728 #最多使用多少页
vm-max-threads 4 #用于执行value对象换入缓存的工作线程数量
java中使用Redis
1.首先下载jedis.jar https://mvnrepository.com/artifact/redis.clients/jedis 下载最新驱动包
2.连接到redis
import redis.clients.jedis.Jedis;
public class RedisJava {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost",端口号);
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
}
}
jedis的使用和redis命令几乎一致,redis命令有的jedis都封装在接口里可以直接调用。