Redis
1、概念
redis是一款高性能的NOSQL系列的非关系型数据库
2、下载安装
3、文件说明
- redis.windows.conf:配置文件
- redis-cli.exe:redis的客户端
- redis-server.exe:redis的服务器
4、命令操作
1、redis的数据结构:
redis存储的是:key,val格式的数据,其中key都是字符串,value由5种不同的数据结构
value的数据结构:
1) 字符串类型 string
2) 哈希类型 hash : map格式
3) 列表类型 list : linkedlist格式
4) 集合类型 set : 不允许重复的元素
5) 有序集合类型 sortedset : 不允许重复的元素,且元素有顺序
2、字符串类型 string
- 存储:
set key val
# set username 张三
- 获取:
get key
# get username
- 删除:
del key
# del username
3、哈希类型 hash
- 存储:
hset key field value
# hset myhash username lisi
# hset myhash password 123
- 获取:
# hget key field:获取指定的field对应的值
# hget myhash username
# hgetall key:获取所有的field和value
# hgetall myhash
- 删除:
hset key field
# hdel myhash username
4、列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 1、添加:
# 1、lpush key value:将元素添加到列表左边
# 2、rpush key value:将元素添加到列表右边
- 2、获取:
# lrange key start end :范围获取
- 3、删除:
# lpop key:删除列表最左边的元素,并将元素返回
# rpop key:删除列表最右边的元素,并将元素返回
5、集合类型 set:不允许重复元素
- 1、存储:
sadd key value
# sadd myset a
- 2、获取:
smembers key
:获取set集合中所有元素
# smembers myset
- 3、删除:
srem key value
:删除set集合中的某个元素
# srem myset a
6、有序集合类型 sortedset:不允许重复元素,且元素有顺序
- 1、存储:
zadd key score value
:
# zadd mysort 60 lisi
- 2、获取:
zrange key start end
# zrange mysort 0 -1 [withscore]
- 3、删除:
zrem key value
# zrem mysort lisi
7、通用命令
-
keys *
:查询所有的键 -
type key
:获取键对应的value类型 -
del key
:删除指定的key value
5、持久化
1、redis是一个内存数据库,当redis服务器重启,或电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘文件中。
2、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
- 开启关闭redis
启动服务:redis-server --service-start
停止服务:redis-server --service-stop
- AOF:日志记录的方式,可以记录每一条命令操作。可以每一次命令操作后,持久化数据
- 编辑redis.windows.conf文件
# appendonly no --> appendonly yes (开启AOF)
# appendfsync always :每一次操作都进行持久化
# appendfsync everysec :每隔一秒操作一次
# appendfsync no :不进行持久化
6、Java客户端 Jedis
jedis:一款Java操作redis的数据库工具
jedis使用步骤
1、导入maven依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
2、使用
@Test
public void test1(){
//1、获取连接
Jedis jedis = new Jedis("localhost",6379);
//2、操作
jedis.set("username","zhangsan");
//3、关闭连接
jedis.close();
}
3、Jedis操作各种redis中的数据结构
- 字符串类型 string
@Test
public void test2(){
//1、获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2、操作
jedis.set("username","zhangsan");
//3、获取
String username = jedis.get("username");
System.out.println(username);
//可以使用setex()方法存储可以指定过期时间的 key val
jedis.setex("activecode", 20, "hehe");//将activecode:hehe键值对存入redis,并且20S后自动删除该键值对
//4、关闭连接
jedis.close();
}
- 哈希类型 hash : map格式
@Test
public void test3(){
//1、获取连接
Jedis jedis = new Jedis();
//2、操作
//存储hash
jedis.hset("user","name","lisi" );
jedis.hset("user","age","23" );
jedis.hset("user","gender","male" );
//获取hash
String hget = jedis.hget("user", "name");
System.out.println(hget);
//获取hash的所有map中的数据
Map<String, String> map = jedis.hgetAll("user");
System.out.println(map);
//3、关闭连接
jedis.close();
}
- 列表类型 list : linkedlist格式
@Test
public void test4(){
//1、获取连接
Jedis jedis = new Jedis();
//2、操作
//list 存储
jedis.lpush("mylist", "a","b","c");//从左边存
jedis.rpush("mylist", "a","b","c");//从右边存
//list 范围获取
List<String> mylist = jedis.lrange("mylist", 0, -1);
System.out.println(mylist);
//list弹出
String elem = jedis.lpop("mylist");
System.out.println(elem);
String elem2 = jedis.rpop("mylist");
System.out.println(elem2);
//3、关闭连接
jedis.close();
}
- 集合类型 set : 不允许重复的元素
@Test
public void test5(){
//1、获取连接
Jedis jedis = new Jedis();
//2、操作
//set 存储
jedis.sadd("myset", "java","php","c++");
//set获取
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
//3、关闭连接
jedis.close();
}
- 有序集合类型 sortedset : 不允许重复的元素,且元素有顺序
@Test
public void test6(){
//1、获取连接
Jedis jedis = new Jedis();
//2、操作
// sortedset存储
jedis.zadd("mysort", 3, "亚瑟");
jedis.zadd("mysort", 30, "后羿");
jedis.zadd("mysort", 55, "孙悟空");
//sortedset获取
Set<String> mysort = jedis.zrange("mysort", 0, -1);
System.out.println(mysort);
//3、关闭连接
jedis.close();
}
jedis连接池JedisPool使用步骤
1、创建JedisPool连接池对象
2、创建方法getResources()方法获取Jedis连接
@Test
public void test7() {
//0、创建一个配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
//1、创建Jedis连接池对象
JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
//2、获取连接
Jedis jedis = jedisPool.getResource();
//3、使用
jedis.set("hehe", "haha");
//4、关闭 归还到连接池中
jedis.close();
}