redis 常用数据结构
hash,list,set,sort,set
一、hash
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 – 1 键值对(40多亿)。
(1)操作
差不多是这个意思
(2)使用jedis进行操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package testRedis; import java.util.List; import java.util.Map; import java.util.Set; import redis.clients.jedis.Jedis; public class test { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.auth("doudou1688"); jedis.hset("xie", "age", "23"); String age = jedis.hget("xie", "age"); System.out.println(age); Map<String, String> all = jedis.hgetAll("xie"); System.out.println(all); Set<String> keys = jedis.hkeys("xie"); System.out.println(keys); List<String> values = jedis.hvals("xie"); System.out.println(values); } } |
(3)用途
和java中的hashmap一样使用。
二、list
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
一个列表最多可以包含 232 – 1 个元素 (4294967295, 每个列表超过40亿个元素)。
(1)操作
(2)使用jedis进行操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package testRedis; import java.util.List; import redis.clients.jedis.Jedis; public class test { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.auth("doudou1688"); jedis.lpush("xie", "xie"); jedis.lpush("xie", "pjl"); jedis.lpush("xie", "xie4ever"); List<String> list = jedis.lrange("xie", 0, 10); System.out.println(list); } } |
(3)用途
有点像java中的list,但是允许出现重复的元素。比如:
[xie4ever, pjl, xie, xie, xie4ever, pjl]
三、set
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 – 1 (4294967295, 每个集合可存储40多亿个成员)。
(1)操作
(2)使用jedis进行操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package testRedis; import java.util.Set; import redis.clients.jedis.Jedis; public class test { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.auth("doudou1688"); jedis.sadd("xie", "xie"); jedis.sadd("xie", "pjl"); jedis.sadd("xie", "xie4ever"); Set<String> set = jedis.smembers("xie"); System.out.println(set); } } |
(3)用途
和java中的set一样使用。
四、sorted set
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 – 1 (4294967295, 每个集合可存储40多亿个成员)。
(1)操作
(2)使用jedis进行操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package testRedis; import java.util.Set; import redis.clients.jedis.Jedis; public class test { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.auth("doudou1688"); jedis.zadd("xie", 1, "xie"); jedis.zadd("xie", 2, "pjl"); jedis.zadd("xie", 3, "xie4ever"); Set<String> set = jedis.zrange("xie", 0, 10); System.out.println(set); } } |
(3)用途
有一系列的排序、求交并集的方法,实现某些操作。
五、总结
由于有不同的时间复杂度和方法,这几种数据结构都有不同的使用场景。
具体情况具体使用是最重要的。