title: Day24-redis
date: 2020-08-10 16:31:44
author: 子陌
Redis
-
概念
redis是一款高性能的NOSQL系列的非关系型数据库,key-value存储系统。
-
下载安装
-
命令操作
-
数据结构
-
redis存储的是:key,value格式的数据,value有五种不同的数据结构:
- 字符串类型String
- 哈希类型hash:map的格式
- 列表类型list:linkedlist格式
- 集合类型set
- 有序集合类型sortedset
-
-
-
具体命令操作
- 字符串String:存储
set key value
、获取get key
、删除del key
- 哈希类型hash:存储
hset mapkey key value
、获取hget mapkey key
、获取所有hgetall mapkey
、删除hdel mapkey key
- 列表类型list:头/尾存储
lpush/rpush key value
、范围获取lrange key start end
、头/尾删除lpop/rpop key
- 集合类型set:存储
sadd key value
、获取所有smembers key
、删除srem key value
- 有序集合类型sortedset:存储
zadd key score value
、获取所有zrange key start end
、删除zrem key value
- 字符串String:存储
-
通用命令
- keys *:查询所有的键
- type key:获取键对应的value的类型
- del key:删除指定的key value
-
持久化操作
-
redis是一个内存数据库,当redis服务器重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中
-
redis持久化机制:
-
RDB:默认方式,不需要进行配置,默认就使用这种机制
- 在一定的间隔时间中,检测key的变化情况,然后持久化数据
-
编辑redis.windows.conf文件
- save 900 1:在900秒15分钟后有一个key发生变化进行持久化
- save 300 10:在300秒5分钟后有十个key发生变化进行持久化
- save 60 10000:在60秒1分钟后有一万个key发生变化进行持久化
-
重启redis服务器,并指定配置文件名称
- zimo> redis-server.exe redis.windows.conf
-
AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
- 编辑redis.windows.conf文件
- appendonly no(关闭AOF)–> yes 开启
- appendfsync always:每一次操作都进行持久化
- appendsync everysec: 每隔一秒进行一次持久化
- appendsync no:不进行持久化
- 编辑redis.windows.conf文件
-
-
-
使用Java客户端操作redis
-
Jedis:一款Java操作redis数据库的工具
-
步骤:
- 下载jedis
- 使用:
- 获取连接
- 操作
- 关闭连接
// 1.获取连接 Jedis jedis = new Jedis("localhost", 6379); // 2.操作 jedis.set("username", "zhangsan"); // 3.关闭连接 jedis.close();
-
Java - Jedis操作
package com.zimo.jedis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JedisTest {
@Test
public void test1(){
// 1.获取连接
Jedis jedis = new Jedis("localhost", 6379); // 如果使用空参,默认值"localhost", 6379
// 2.1操作string
jedis.set("username", "zhangsan");
String username = jedis.get("username");
System.out.println(username);
// setex()可以指定过期时间
jedis.setex("activecode", 20, "hehe"); // 将activecode:hehe存入redis,且20秒后自动删除
// 2.2操作hash
jedis.hset("user", "name", "zimo");
jedis.hset("user", "age", "23");
jedis.hset("user", "gender", "男");
String name = jedis.hget("user", "name"); // 获取hash中的user键中name值
System.out.println(name);
Map<String, String> user = jedis.hgetAll("user");// 获取hash user所有字段
for (Map.Entry<String, String> entry : user.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
// 2.3操作list
jedis.lpush("mylist", "a1","b1","c1"); // 从左边存
jedis.rpush("mylist", "a2","b2","c2"); // 从右边存
List<String> mylist = jedis.lrange("mylist", 0, -1);// 范围获取:-1代表所有
System.out.println(mylist.toString());
jedis.lpop("mylist"); // 左边弹出
jedis.rpop("mylist"); // 右边弹出
List<String> lrange = jedis.lrange("mylist", 0, -1);
System.out.println(lrange);
// 2.4操作set
jedis.sadd("myset", "java","php","c++"); // set存储
Set<String> myset = jedis.smembers("myset"); // 获取所有
System.out.println(myset);
// 2.5操作sortedset
jedis.zadd("mysortset", 3, "亚瑟"); // set存储
jedis.zadd("mysortset", 20, "后羿");
jedis.zadd("mysortset", 25, "孙悟空");
Set<String> mysortset = jedis.zrange("mysortset", 0 , -1); // 获取所有
System.out.println(mysortset);
// 3.关闭连接
jedis.close();
}
}
- Jedis连接池:JedisPool
- 使用:
- 创建JedisPool连接池对象
- 调用方法getResource
- 使用:
// 0.创建一个配置对象
// 可以使用自定义配置加载连接池对象new JedisPool(new JedisPoolConfig(), "localhost", 6379);
// 1.创建jedis连接池对象
JedisPool jedisPool = new JedisPool();
// 2.获取连接
Jedis resource = jedisPool.getResource();
// 3.使用
resource.set("hehe", "haha");
// 4.关闭,归还到连接池
resource.close();
- 注意:使用redis缓存一些不经常发生变化的数据
- 数据库的值一旦发生改变,则需要更新缓存
- 数据库的表执行增删改的相关操作,需要将redis缓存数去情况,再次存入