一、 Redis概念
redis是一款高性能的非关系型数据库。
redis数据类型
字符串类型: String,哈希类型:hash,列表类型:list,集合类型:set,有序集合类型:sorted set
二、 应用场景:
缓存,聊天室在线好友,任务队列(秒杀),应用排行榜,分布式架构中session分离
三、redis解压即可使用,以及文件说明:
redis.windows.conf:配置文件
redis-cli.exe: redis的客户端
redis-server.exe:redis的服务端
四、redis的使用方式
redis的数据结构: rdis存储的是key,value 格式的数据,其中key都是字符串,value有五种数据格式
value的数据结构:
字符串类型: String,
哈希类型:hash,map形式的存储方式
列表类型:list, linkedlist格式
集合类型:set, hashset格式
有序集合类型:sorted set
4.1、 使用命令操作redis:
字符串类型: value 不能重复
存储: set key value
获取: get key
删除: del key
hash类型:
存储: hset key(集合名) field value 例如: hset myhash username(key) liuliu(value)
获取: hset key(集合名) field value 例如: hget myhash username
删除: hdel key(集合名) field
获取hash中的所有数据: hgetall
列表类型(list):
可以添加数据到列表的左边或者右边。
存储: lpush key value 从列表的左边添加,rpush key value 从列表的右边添加,
获取: lrange key start end 从列表中 start 到 end 的数据
删除: lpop key 删除列表最左边的一个元素,并将元素返回
删除: rpop key 删除列表最右边的一个元素,并将元素返回
集合类型(set,不允许重复):
存储: sadd key value
获取: smember key 获取set集合中所有元素
删除:srem key value
有序集合类型(sorted set):
sorted set 会根据 score 的大小进行排序
存储: zadd key score value 例如 : zadd mysorted(集合名) 26(序号) liuliu
获取: zrange key start end 从列表中 start 到 end 的数据
删除:zrem key value
获取列表中score(序列的值): zrange key start end withscore 例如: zrange mysorted 0 - -1(负一) withscore
4.2、 使用java代码操作redis:
4.3、 通用命令:
keys * : 查询redis中的所有键
type key: 查询键的类型
del key:删除指定的key
五、redis的持久化:
可以将redis中的数据持久化保存到硬盘中。
5.1、redis持久化机制:
RDB: 默认方式,在一定的时间间隔检测key的变化情况,然后持久化数据
AOF: 以日志的方式记录每一条数据持久化到文件中。
RDB使用方法:
找到解压后的redis配置文件 redis.windows.conf,编辑配置文件,找到一下代码
save 900 1 十五分钟之后,有一个key改变,就会持久化一次
save 300 10 五分钟之后,有大于10个key改变,就会持久化一次
save 60 10000 60秒之后,有10000个key改变,就会持久化一次
修改配置后文件,需要在cmd 命令行进入到redis解压目录进行启动redis的服务端和客户端,
redis-service.exe redis.windows.conf
数据会存储到redis解压目录的一个dump.rdb文件中。
AOF使用方法:
找到解压后的redis配置文件 redis.windows.conf,编辑配置文件,找到一下代码
appendonly no 修改为 appendonly yes 表示开启AOF,然后找到下面的代码,选择持久化方式
# appendfsync always 每一次操作都进行持久化
appendfsync everysec (默认开启) 每隔一秒进行一次持久化
# appendfsync no 不进行持久化
修改完毕后,操作方式如RDB一致。数据会被持久化到redis解压文件下的 appendonly.aof文件中
六、Java客户端 Jedis:
一款java操作redis数据库的工具。
jedis操作redis的数据类型,jedis中的方法和redis命令一样。
但有个特别的设置字符串方法,就是指定所存储的字符串数据过期时间:setex("键的名称","失效时间",''存储的数据');
七、Jedis的连接池:
7.1 Jedisd自带的连接池 JedisPoll
使用:JedisPoll jedisPoll = new JedisPoll (可以传一个连接池配置对象,主机名,端口号)
创建JedisPoll连接池对象,调用getResource()方法获取Jedis的连接,调用redis存储数据的方法。
连接池配置对象(JedisPollConfig ):
JedisPollConfig jedisPollConfig = new JedisPollConfig ();
edisPollConfig.setMaxTotal(最大连接数);
edisPollConfig.setMaxIdle(最大的空闲连接);
7.2 连接池的工具类:
创建一个 JedisPollUtil工具类。
工具类中加载JedisPollConfig 的配置文件 Jedis.properties
package cn.itcast.jedis.util;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
JedisPool工具类
加载配置文件,配置连接池的参数
提供获取连接的方法
*/
public class JedisPoolUtils {
private static JedisPool jedisPool;
static{
//读取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro = new Properties();
//关联文件
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化JedisPool
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
}