redis是一款高性能的NOSQL系列的非关系型数据库
1、官网:https://redis.io
2、中文网:http://www.redis.net.cn
redis存储的是:key,val格式的数据,其中key都是字符串,value由5种不同的数据结构
value的数据结构:
1) 字符串类型 string
2) 哈希类型 hash : map格式
3) 列表类型 list : linkedlist格式
4) 集合类型 set : 不允许重复的元素
5) 有序集合类型 sortedset : 不允许重复的元素,且元素有顺序
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 :不进行持久化jedis:一款Java操作redis的数据库工具
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(); }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(); }