1. 程式人生 > >redis數據結構

redis數據結構

ret 版權 ber copy link return rep origin 基本配置

redis保存數據的幾種類型

標簽: javaredis 技術分享 分類:

Redis保存數據時都有key和value,key和value要麽是String類型的,要麽是byte[]類型的。在此都是講的String類型的,所用的jar主要有:

commons-pool-1.6.jar
jedis-2.1.0.jar

1.保存數據之String

要把一個String保存到redis中,用set(key,value),獲取值用get(key)

2.保存數據之List

要把一個List保存到redis中,遍歷List<String>,逐個調用lpush(key,value),獲取值用lrange(key,start,end),start代表開始位置,end代表結束位置,如果為-1則代表到未尾。

這裏lpush的意思是從左邊保存,也就是後來居上。

3.保存數據之Set

要把一個Set保存到redis中,遍歷Set<String>,逐個調用sadd(key,value),獲取值用smembers(key)

4.保豐數據之SortedSet

SortedSet的意思是他的每一個元素是有順序的,順序根據其score來決定,如果socre一樣,則按value排序。保存到redis的方法是,對每一個要保存的元素,

調用zadd(key,score,value),獲取值用zrange(key,satrt,end),start代表開始位置,end代表結束位置,如果為-1則代表到未尾。

5.保存數據之Hash

要把一個Hash保存到redis中,遍歷Map<String,String>,逐個調用hset(key,hashKey,hashValue),獲取所有值有hgetAll(key)

下面來說說怎麽保存對象到redis中,我們知道,redis支持的value要麽是String類型,要麽是byte[]類型,那麽思路就是把我們想要保存的對象序列化成String類型或byte[]類型,然後保存之,取值時再反序列化成對象。

最後粘下我的測試代碼:

[java] view plain copy
  1. package com.syz.jedis;
  2. import redis.clients.jedis.JedisPool;
  3. import redis.clients.jedis.JedisPoolConfig;
  4. public class RedisClient {
  5. private static final int MAX_ACTIVE = 20;
  6. private static final int MAX_IDLE = 5;
  7. private static final int MAX_WAIT = 1000;
  8. private static final String HOST = "127.0.0.1";
  9. private static final int PORT = 6379;
  10. private static JedisPool jedisPool;
  11. private RedisClient() {
  12. }
  13. /**
  14. * 初始化非切片池
  15. */
  16. private static void initialPool() {
  17. // 池基本配置
  18. JedisPoolConfig config = new JedisPoolConfig();
  19. config.setMaxActive(MAX_ACTIVE);
  20. config.setMaxIdle(MAX_IDLE);
  21. config.setMaxWait(MAX_WAIT);
  22. jedisPool = new JedisPool(config, HOST, PORT);
  23. }
  24. public static JedisPool getJedis() {
  25. if (jedisPool == null) {
  26. synchronized (RedisClient.class) {
  27. if (jedisPool == null) {
  28. initialPool();
  29. }
  30. }
  31. }
  32. return jedisPool;
  33. }
  34. }

[java] view plain copy
  1. package com.syz.jedis;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Map.Entry;
  9. import java.util.Set;
  10. import redis.clients.jedis.Jedis;
  11. import redis.clients.jedis.JedisPool;
  12. public class RedisTest {
  13. public static void main(String[] args) {
  14. JedisPool jedisPool = RedisClient.getJedis();
  15. Jedis jedis = jedisPool.getResource();
  16. jedis.select(10);
  17. try {
  18. System.out.println("testString=================begin");
  19. testString(jedis);
  20. System.out.println("testString=================end");
  21. System.out.println("testList=================begin");
  22. testList(jedis);
  23. System.out.println("testList=================end");
  24. System.out.println("testSet=================begin");
  25. testSet(jedis);
  26. System.out.println("testSet=================end");
  27. System.out.println("testSortedSet=================begin");
  28. testSortedSet(jedis);
  29. System.out.println("testSortedSet=================end");
  30. System.out.println("testHash=================begin");
  31. testHash(jedis);
  32. System.out.println("testHash=================end");
  33. }
  34. catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. finally {
  38. jedisPool.returnResource(jedis);
  39. }
  40. }
  41. private static void testString(Jedis jedis) {
  42. String key = "test:string:a";
  43. // 為了保持多次測試結果一樣,每次開始時都刪除
  44. jedis.del(key);
  45. String value = "hello redis";
  46. jedis.set(key, value);
  47. String val = jedis.get(key);
  48. System.out.println(val);
  49. // 結果:hello redis
  50. }
  51. private static void testList(Jedis jedis) {
  52. String key = "test:list:a";
  53. // 為了保持多次測試結果一樣,每次開始時都刪除
  54. jedis.del(key);
  55. List<String> values = new ArrayList<>();
  56. for (int i = 0; i < 10; i++) {
  57. char c = (char) (65 + i);
  58. values.add(String.valueOf(c));
  59. }
  60. for (int i = 0; i < values.size(); i++) {
  61. jedis.lpush(key, values.get(i));
  62. }
  63. List<String> val = jedis.lrange(key, 0, -1);
  64. System.out.println(val);
  65. // 結果:[J, I, H, G, F, E, D, C, B, A]
  66. }
  67. private static void testSet(Jedis jedis) {
  68. String key = "test:set:a";
  69. // 為了保持多次測試結果一樣,每次開始時都刪除
  70. jedis.del(key);
  71. Set<String> values = new HashSet<>();
  72. for (int i = 0; i < 10; i++) {
  73. char c = (char) (65 + i);
  74. values.add(String.valueOf(c));
  75. }
  76. Iterator<String> ite = values.iterator();
  77. while (ite.hasNext()) {
  78. String value = ite.next();
  79. jedis.sadd(key, value);
  80. }
  81. Set<String> val = jedis.smembers(key);
  82. System.out.println(val);
  83. // 結果:[D, E, F, G, A, B, C, H, I, J]
  84. }
  85. private static void testSortedSet(Jedis jedis) {
  86. String key = "test:sortedset:a";
  87. // 為了保持多次測試結果一樣,每次開始時都刪除
  88. jedis.del(key);
  89. String[] values = { "C", "B", "G", "D", "d" };
  90. jedis.zadd(key, 10, "E");
  91. for (int i = 0; i < values.length; i++) {
  92. jedis.zadd(key, i + 10, values[i]);
  93. }
  94. jedis.zadd(key, 10, "F");
  95. Set<String> val = jedis.zrange(key, 0, -1);
  96. System.out.println(val);
  97. // 結果:[C, E, F, B, G, D, d]
  98. }
  99. private static void testHash(Jedis jedis) {
  100. String key = "test:hash:a";
  101. // 為了保持多次測試結果一樣,每次開始時都刪除
  102. jedis.del(key);
  103. Map<String, String> values = new HashMap<>();
  104. for (int i = 0; i < 10; i++) {
  105. String s = String.valueOf((char) (i + ‘A‘));
  106. values.put(s, s + "_val");
  107. }
  108. Iterator<Entry<String, String>> ite = values.entrySet().iterator();
  109. while (ite.hasNext()) {
  110. Entry<String, String> entry = ite.next();
  111. String k = entry.getKey();
  112. String v = entry.getValue();
  113. jedis.hset(key, k, v);
  114. }
  115. Map<String, String> val = jedis.hgetAll(key);
  116. System.out.println(val);
  117. // 結果:{D=D_val, E=E_val, F=F_val, G=G_val, A=A_val, B=B_val, C=C_val,
  118. // H=H_val, I=I_val, J=J_val}
  119. }
  120. }

redis數據結構