Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色。通过jedis可以在java客户端对redis进行一些操作。
注意:这一篇结合上一篇redis的常用操作看更佳,连接如下:redis常用操作
目录
这里需要注意的是正常这样写会报错,我们首先需要导入jedis的jar包,同时我们需要进行如下3步操作:
-
- public class RedisTest {
- public static void main(String[] args) {
- test1() ;
- }
-
- private static void test1() {
- Jedis jedis = new Jedis("192.168.102.129") ;
- jedis.auth("123456") ;
- jedis.set("foo","bar") ;
- System.out.println(jedis.get("foo"));
- }
- }
- import redis.clients.jedis.Jedis;
-
- import java.util.List;
-
- public class RedisTest {
- private static Jedis jedis ;
- public static void main(String[] args) {
- jedis = new Jedis("192.168.102.129") ;
- jedis.auth("123456") ;
- test1() ;
- }
-
- private static void test1() {
- //测试set和get
- jedis.set("username","tom") ;
- System.out.println(jedis.get("username"));
-
- //演示mset和mget
- jedis.mset("password","123","age","18") ;
- List
values = jedis.mget("username","password","age") ; - System.out.println(values);
-
- //演示append,setrange,getrange
- jedis.append("username", " is boy") ;
- System.out.println(jedis.get("username"));
- jedis.setrange("username",7,"girl") ;
- System.out.println(jedis.get("username"));
- System.out.println(jedis.getrange("username",0,-1));
-
- }
- }
- import redis.clients.jedis.BinaryClient;
- import redis.clients.jedis.Jedis;
-
- import java.util.List;
-
- public class RedisTest {
- private static Jedis jedis ;
- public static void main(String[] args) {
- jedis = new Jedis("192.168.102.129") ;
- jedis.auth("123456") ;
- test1() ;
- }
-
- private static void test1() {
- //测试lpush和lrange
- jedis.lpush("names","张三","李四","tom","john");
- List
list = jedis.lrange("names",0,-1) ; - System.out.println(list);
-
- //测试lset
- // jedis.lset("names",1,"王五") ;
- // List
list1 = jedis.lrange("names",0,-1) ; - // System.out.println(list1);
- System.out.println(jedis.lindex("names",1));
-
- //测试linsert
- jedis.linsert("names", BinaryClient.LIST_POSITION.BEFORE,"tom","steve") ;
- List
list1 = jedis.lrange("names",0,-1) ; - System.out.println(list1);
-
- //测试lrem
- jedis.lrem("names",2,"tom") ;
- List
list2 = jedis.lrange("names",0,-1) ; - System.out.println(list2);
-
- }
- }
- import redis.clients.jedis.Jedis;
-
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
-
- public class RedisTest {
- private static Jedis jedis ;
- public static void main(String[] args) {
- jedis = new Jedis("192.168.102.129") ;
- jedis.auth("123456") ;
- test1() ;
- }
-
- private static void test1() {
- //hset和hget测试
- jedis.hset("user","username","tom") ;
- String value = jedis.hget("user","username") ;
- System.out.println(value);
-
- //hmset和hmget
- Map
map = new HashMap() ; - map.put("password","123") ;
- map.put("age","15") ;
- map.put("sex","male") ;
- map.put("username","james") ;
- jedis.hmset("user",map) ;
- List
hmget = jedis.hmget("user", "username", "password", "age"); - System.out.println(hmget) ;
-
- //测试hgetall hkeys kvals
- Map
user = jedis.hgetAll("user"); - for(String key : user.keySet()){
- System.out.println(key + " " + map.get(key));
- }
-
- Set
user1 = jedis.hkeys("user"); - System.out.println(user1);
-
- List
user2 = jedis.hvals("user"); - System.out.println(user2);
-
- //测试hdel
- jedis.hdel("user","username","password") ;
- Map
user3 = jedis.hgetAll("user"); - System.out.println(user3);
-
-
- }
- }
-
- import redis.clients.jedis.Jedis;
- import java.util.Set;
-
- public class RedisTest {
- private static Jedis jedis ;
- public static void main(String[] args) {
- jedis = new Jedis("192.168.102.129") ;
- jedis.auth("123456") ;
- test1() ;
- }
-
- private static void test1() {
- //测试sadd smembers
- jedis.sadd("language1","java","c","python","matlab") ;
- Set
language1 = jedis.smembers("language1"); - System.out.println(language1);
-
- //测试srem
- jedis.srem("language1","c") ;
- Set
language11 = jedis.smembers("language1"); - System.out.println(language11);
-
- //测试sdiff
- jedis.sadd("l1","java","c","IOS","android") ;
- jedis.sadd("l2","java","python","c++") ;
- Set
sdiff = jedis.sdiff("l1", "l2"); - System.out.println(sdiff);
-
- //测试sinter
- Set
sinter = jedis.sinter("l1", "l2"); - System.out.println(sinter);
-
- //测试sunion
- Set
sunion = jedis.sunion("l1", "l2"); - System.out.println(sunion);
-
-
- }
- }
-
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.Tuple;
-
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Set;
-
- public class RedisTest {
- private static Jedis jedis ;
- public static void main(String[] args) {
- jedis = new Jedis("192.168.102.129") ;
- jedis.auth("123456") ;
- test1() ;
- }
-
- private static void test1() {
- //测试zadd zrange zrangeByScore
- Map
map = new HashMap() ; - map.put("张三",18.00) ;
- map.put("李四",19.00) ;
- map.put("王五",17.23) ;
- map.put("马六",19.02) ;
- jedis.zadd("zkey",map) ;
- Set
zkey = jedis.zrange("zkey", 0, -1); - System.out.println(zkey);
-
- Set
zkey1 = jedis.zrangeByScore("zkey", 17, 18); - System.out.println(zkey1);
-
- //zrangeWithScores
- Set
zkey2 = jedis.zrangeWithScores("zkey", 0, -1); - for(Tuple t : zkey2){
- System.out.println(t.getScore() + " " + t.getElement());
- }
-
- //zrank
- System.out.println(jedis.zrank("zkey","李四")) ;
-
- //zscore
- System.out.println(jedis.zscore("zkey","李四"));
-
- //zrem
- jedis.zrem("zkey","李四") ;
- System.out.println(jedis.zrange("zkey",0,-1));
-
-
- }
- }
- import redis.clients.jedis.Jedis;
-
- import java.util.Set;
-
-
- public class RedisTest {
- private static Jedis jedis ;
- public static void main(String[] args) {
- jedis = new Jedis("192.168.102.129") ;
- jedis.auth("123456") ;
- test1() ;
- }
-
- private static void test1() {
- //keys pattern
- Set
s = jedis.keys("*") ; - System.out.println(s);
-
- //del
- jedis.del("user") ;
- System.out.println(s);
-
- //key的时间设置
- jedis.expire("username",200) ;
- Long ttl = jedis.ttl("username");
- System.out.println(ttl);
- jedis.persist("username") ;
-
-
- }
- }
8.1 redis数据持久化机制介绍
1). RDB持久化:该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
2). AOF(append only file)持久化:该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
3). 同时应用AOF和RDB。
4). 无持久化:可通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了.
8.2 ROB和AOF对比
1). 数据的备份和恢复非常方便,因为一个数据库只有一个持久化文件
2). 性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。
3). 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。
2.RDB又存在哪些劣势呢?
1).系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
2). 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。
3.AOF的优势有哪些呢?
1). 该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3种同步策略,即每秒同步、每修改同步和不同步。
2).对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。
3). 如果日志过大,Redis可以自动启用rewrite机制迅速“瘦身”(也可手动触发aof的rewrite操作,命令: bgrewriteaof)
4). AOF日志格式清晰、易于理解,很容易用AOF日志文件完成数据的重建。
4.AOF的劣势有哪些呢?
1). 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。
2). 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。