redis的五种数据类型及应用场景
前言
redis是用键值对的形式来保存数据,键类型只能是String,但是值类型可以有String、List、Hash、Set、Sorted Set五种,来满足不同场景的特定需求。
本博客中的示例不是将控制台作为redis的一个客户端,而是将redis运用在java里进行测试
需要有java redis的驱动包,可以通过引入maven的依赖即可
<dependency> <groupId>org.rarefiedredis.redis</groupId> <artifactId>redis-java</artifactId> <version>0.0.17</version> </dependency>
String
String类型是最基础的一种key-value存储形式,value其实不仅仅可以是String,也可以是数值类型。常常用来做计数器这类自增自减的功能,可用在粉丝数、微博数等。
示例
1 //连接本地的 Redis 服务 2 Jedis jedis = new Jedis("localhost"); 3 System.out.println("连接成功"); 4 //查看服务是否运行 5 System.out.println("服务正在运行: "+jedis.ping()); 6 //String实例 7 jedis.set("hello", String.valueOf(1)); 8 jedis.incr("hello"); 9 jedis.set("hello1","word1"); 10 System.out.println(jedis.get("hello")); 11 System.out.println(jedis.mget("hello","hello1"));
常用命令
- set
- get
- mget
- incr
- decr
List
list就是链表,在redis实现为一个双向链表,可以从两边插入、删除数据。应用场景可以有微博的关注列表、粉丝列表、消息列表等。
有一个lrange函数,可以从某个元素开始读取多少个元素,可用来实现分页功能。
示例
1 /*list实例,双向链表结构,适合做消息队列, 2 但其实真正应用中一般都会用专门做消息队列的中间件例如RabbitMQ*/ 3 jedis.lpush("201宿舍","hlf"); 4 jedis.lpush("201宿舍","css"); 5 jedis.lpush("201宿舍","ty"); 6 jedis.lpush("201宿舍","jy"); 7 List<String> name = jedis.lrange("201宿舍",0,3); 8 for (String person:name 9 ) { 10 System.out.print(person+" "); 11 }
常用命令
- lpush
- rpush
- lpush
- lpop
- lrange
Hash
hash就是值类型存储的是一个键值对形式,适合存储对象类型信息,例如个人信息、商品信息等。
示例
1 //hash实例,适合存储对象 2 HashMap<String,String> map = new HashMap<String, String>(); 3 map.put("name","hlf"); 4 map.put("sex","女"); 5 map.put("age","21"); 6 jedis.hmset("hlf",map); 7 jedis.hset("hlf","major","software"); 8 Map<String,String> map1 = jedis.hgetAll("hlf"); 9 String age = jedis.hget("hlf","age"); 10 System.out.println(map1); 11 System.out.println(age);
常用命令
- hset
- hmset
- hget
- hgetAll
Set
set表示存储的一个元素不重合的集合,因为set集合支持查缉、并集操作,因此适合做共同好友等功能
示例
1 //set实例 2 jedis.sadd("set","hhh"); 3 jedis.sadd("set","ff"); 4 jedis.sadd("set","hhh"); 5 System.out.println(jedis.smembers("set")); 6 jedis.sadd("set1","oo"); 7 jedis.sadd("set1","ff"); 8 System.out.println("交集:"+jedis.sinter("set","set1")); 9 System.out.println("合集:"+jedis.sunion("set","set1"));
常用命令
- sadd
- spop
- smembers
- sunion
- sinter
Sorted Set
相对于Set,Sorted Set多了一个Score作为权重,使集合里面的元素可以按照score排序,注意它是Set,所以它里面的元素也不能重复
示例
//sorted set实例 jedis.zadd("set2",4,"redis"); jedis.zadd("set2",3,"mysql"); jedis.zadd("set2",2,"kk"); jedis.zadd("set2",1,"redis"); System.out.println(jedis.zrangeByScore("set2",0,4));
常用命令
- zadd
- zpop
- zrangeByScore
keep positive and calm,then go on