1.创建maven项目,导入依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency>
2.java远程连接redis需要使用Jedis包
public static void main(String[] args) { // System.out.println("你好"); Jedis jedis = new Jedis("192.168.**.***",6379); /*jedis所有的命令就是我们之前学习的所有指令*/ System.out.println(jedis.ping()); }
这里需要注意的是,一定保持虚拟机的网络处于开启状态。防火墙关闭状态。
然后,我们
开始利用redis写代码,redis基础有以下几个数据结构
1.操纵String
// 操纵String @Test public void DriveString(){ Jedis jedis = new Jedis("192.168.**.***",6379); jedis.set("key", "www.baidu.com"); jedis.mset("name","张三","age","19","爱好","吃粑粑"); //使用java的arraylist结构将redis的数据获取,存储并打印 ArrayList<Object> objects = new ArrayList<>(); objects.add(jedis.mget("name", "age", "爱好")); System.out.println(objects); // 获取存储的数据并输出 System.out.println("redis 存储的字符串为: "+ jedis.get("key")); //jedis使用keys(*)作为正则化输出 Set<String> keys = jedis.keys("*"); Iterator<String> it=keys.iterator() ; //打印全部 while(it.hasNext()){ String key = it.next(); System.out.println(key); } System.out.println("jedis字段是否存在:"+jedis.exists("k2")); }
2.操纵list
list特点:[可重复,类似链表的存储即双端存储]
// List看成列表,lpush和rpush是在左右进行添加(rpop和lpop) // list查看,修改,截取字符 @Test public void DriverList(){ Jedis jedis = new Jedis("192.168.**.***",6379); jedis.lpush("fruit1","香蕉","banana"); jedis.lpush("fruit1","苹果"); jedis.rpush("fruit3","peach"); jedis.rpush("fruit4","orange"); jedis.lpush("animals","dog","cat","pig","fish","bird","duck"); System.out.println("获取animals集合中所有的元素:" + jedis.lrange("animals", 0, -1)); System.out.println("获取animals集合中0到倒数第二的元素:"+jedis.lrange("animals",0,-2)); //删除指定的值,第二个元素为删除的个数,后add进去的值先被删,类似于出栈 System.out.println("删除下标0-3区间之外的元素:"+jedis.ltrim("animals",0,1)); System.out.println("animals列表出栈(右端):"+jedis.rpop("animals")); //System.out.println("修改animals的指定下标1的内容:" + jedis.lset("animals", 1, "pandas")); //System.out.println("获取animals的长度:"+jedis.llen("animals")); //System.out.println("获取animals下标为2的元素:"+jedis.lindex("animals",2)); }
3.操纵Hash
public void DriverHash(){ /* hash的特点:key,字段,属性 把key1看成一个数据表 filed看成一个数据字段 value看成field的数据值 */ Jedis jedis = new Jedis("192.168.**.***",6379); //哈希表key中的域field的值设为value。 jedis.hset("key1", "field1", "field1-value"); jedis.hset("key1", "field2", "field2-value"); //创建一个hashMap Map map = new HashMap(); map.put("field3", "field3-value"); map.put("field4", "field4-value"); //在key1中添加map(相当于在key1数据库添加map数据表) jedis.hmset("key1", map); //返回哈希表key中给定域field的值()--key1中的field1数据 jedis.hget("key1", "field1"); //返回哈希表key中给定域field的值(多个) List list = jedis.hmget("key1","field1","field2"); for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } //返回哈希表key中所有域和值 Map<String,String> map2 = jedis.hgetAll("key1"); for(Map.Entry entry: map2.entrySet()) { System.out.print(entry.getKey() + ":" + entry.getValue() + "\t"); } //删除哈希表key中的一个或多个指定域 /*jedis.hdel("key1", "field1"); jedis.hdel("key1", "field1","field2");*/ }
hash应该是最常用的redsi数据结构了,它的底层逻辑类似于hashmap.
我们可以将hash看成一个数据库(redis是没有库的概念的)。key可以看成是表名,field可以看成字段,value可以看成字段数据。
4.操纵集合
集合:分为有序和无序两种,集合最大的特点是不可重复,类似于python,mysql的元组。
@Test public void DriverSet(){ //集合类型 Jedis jedis = new Jedis("192.168.**,***",6379); //增加集合元素信息 jedis.sadd("set", "a", "b", "d", "f", "c"); //获取集合set中的值 Set values= jedis.smembers("set"); System.out.println(values); //删除元素a jedis.srem("set","a"); values= jedis.smembers("set"); System.out.println(values); //元素的个数 Long l= jedis.scard("set"); System.out.println(l); jedis.sadd("set1", "a", "b", "13", "23", "c"); //获取差集 Set set2=jedis.sdiff("set","set1"); System.out.println(set2); set2=jedis.sdiff("set1","set"); System.out.println(set2); //返回给定所有集合的差集并存储在 destination 中 jedis.sdiffstore("set3","set1","set"); values= jedis.smembers("set3"); System.out.println(values); //返回给定所有集合的交集 Set set5 = jedis.sinter("set1","set"); System.out.println(set5); //返回给定所有集合的交集并存储在 destination jedis.sinterstore("set5","set1","set"); values= jedis.smembers("set5"); System.out.println(values); //判断 member 元素是否是集合 key 的成员 boolean b = jedis.sismember("set","f"); System.out.println(b); /* SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合*/ jedis.smove("set", "set5", "f"); values= jedis.smembers("set5"); System.out.println(values); /*SPOP key 移除并返回集合中的一个随机元素*/ String random = jedis.spop("set"); System.out.println(random); /* SRANDMEMBER key [count] 返回集合中一个或多个随机数*/ List resl= jedis.srandmember("set",2); System.out.println(resl); /* SUNION key1 [key2] 返回所有给定集合的并集*/ Set ss= jedis.sunion("set","set1"); System.out.println(ss); /* SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中*/ jedis.sunionstore("set6","set","set1"); values= jedis.smembers("set6"); System.out.println(values); }