Redis是基于内存为介质的缓存数据库、非关系型数据库 默认端口:6379
访问数据量少于百万时 一般用不到redis,redis是由意大利人所写 同时提供了16个服务器(0-15)通过select x 选择 各个之间数据不共享 默认为0服务器
特点:
因为使用内存,继承的内存的优点 读写速度快 异步持久化
非关系型数据库,采用Key-Value 形式进行存储 Value形式有五种(String、Hash、List、Set、ZSet [有序集合])
与memcache 不同 redis 可以有持久化操作 因此 redis可以当数据库使用。两种持久化方式(快照模式、AOF日志追加)
主从模式 主服务器数据共享到从服务器。 哨兵模式 :当主服务器出现宕机 会自动选择从服务器中的一个成为主服务器
缓存过程 第一次从数据库取到数据放在 内存上的 redis中 第二次取时 可以直接从redis中取 减少了与服务器之间的IO
判断 客户端与服务器端是否连接成功 ping -pong
设置客户端与服务器端连接密码 默认没有 如果设置密码后必须验证密码后才可以操作
Value五种形式使用
String 返回OK
Hash 返回OK
List 返回受影响的行数 由于是链表 有左边插入 lpush 和 rpush 同数据结构同 有序可重复 获取值时根据下标
Set 返回受影响的行数 无序不可重复
Zset 返回受影响的行数 有序不可重复 额外增加一个score 的key负责排序 获取是根据成绩范围选择
![]()
设置 主从 服务器 在redis.windows.conf下配置
主服务器 地址127.0.0.1 端口 6379 可以自己设置
从服务器 地址不变 端口 6380 或者其他自己设置 设置 slave 127.0.0.1 6379 (主服务器的地址和端口)bind 127.0.0.1
redis持久化操作:
RDB (快照):将数据完成后 输入save 就会启动一个fork()的子进程 将数据存储到dump.rdb文件中 ,好处便于备份和恢复,缺点是 设置了几个规则才会启动该写入(比如每五分钟写一次),当数据量过大时 可能会对客户端请求停止处理 ,AOF不会有这样的问题
AOF(日志追加):在redis.window.conf文件中配置
# 是否开启AOF,默认关闭(no)appendonly yes
# 指定 AOF 文件名appendfilename appendonly.aof
# Redis支持三种不同的刷写模式:
# appendfsync always #每次收到写命令就立即强制写入磁盘,是最有保证的完全的持久化,但速度也是最慢的,一般不推荐使用。
#appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
# appendfsync no #完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不被推荐。
Redis事务管理 没有事务回滚机制 如果中间出现问题 只有出现问题的值存放不进 其他正常
Jedis : java 与 redis连接的API ,为了实现java与redis之间进行操作
开启redis 服务器
添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>
Java 类 换个方式进行操作
@Test
public void jedisTest(){
Jedis jedis = new Jedis("127.0.0.1",6379);
System.out.println(jedis.ping());
System.out.println("----------string-----------");
jedis.set("hello","jedis");
System.out.println(jedis.get("hello"));
System.out.println("----------hash-----------");
Map<String,String> map0 = new HashMap<>();
map0.put("name","wang");
map0.put("sex","nan");
jedis.hmset("hash",map0);
Map<String, String> map = jedis.hgetAll("hash");
Set<String> strings = map.keySet();
for (String string : strings) {
System.out.println(map.get(string));
}
System.out.println("----------list-----------");
jedis.lpush("list","wang","liu","li");
List<String> list = jedis.lrange("list", 0, 2);
for (String s : list) {
System.out.println(s);
}
System.out.println("----------set-----------");
jedis.sadd("set","wang","li");
Set<String> set = jedis.smembers("set");
for (String s : set) {
System.out.println(s);
}
System.out.println("----------zset-----------");
jedis.zadd("zset",80,"java");
jedis.zadd("zset",70,"html5");
Set<String> zset = jedis.zrangeByScore("zset", 0, 100);
for (String s : zset) {
System.out.println(s);
}
}