redis數據結構
redis保存數據的幾種類型
標簽: javaredis 2016-09-20 16:18 4010人閱讀 評論(0) 收藏 舉報 分類:版權聲明:本文為博主原創文章,未經博主允許不得轉載。
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
- package com.syz.jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPoolConfig;
- public class RedisClient {
- private static final int MAX_ACTIVE = 20;
- private static final int MAX_IDLE = 5;
- private static final int MAX_WAIT = 1000;
- private static final String HOST = "127.0.0.1";
- private static final int PORT = 6379;
- private static JedisPool jedisPool;
- private RedisClient() {
- }
- /**
- * 初始化非切片池
- */
- private static void initialPool() {
- // 池基本配置
- JedisPoolConfig config = new JedisPoolConfig();
- config.setMaxActive(MAX_ACTIVE);
- config.setMaxIdle(MAX_IDLE);
- config.setMaxWait(MAX_WAIT);
- jedisPool = new JedisPool(config, HOST, PORT);
- }
- public static JedisPool getJedis() {
- if (jedisPool == null) {
- synchronized (RedisClient.class) {
- if (jedisPool == null) {
- initialPool();
- }
- }
- }
- return jedisPool;
- }
- }
[java] view plain copy
- package com.syz.jedis;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.Set;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- public class RedisTest {
- public static void main(String[] args) {
- JedisPool jedisPool = RedisClient.getJedis();
- Jedis jedis = jedisPool.getResource();
- jedis.select(10);
- try {
- System.out.println("testString=================begin");
- testString(jedis);
- System.out.println("testString=================end");
- System.out.println("testList=================begin");
- testList(jedis);
- System.out.println("testList=================end");
- System.out.println("testSet=================begin");
- testSet(jedis);
- System.out.println("testSet=================end");
- System.out.println("testSortedSet=================begin");
- testSortedSet(jedis);
- System.out.println("testSortedSet=================end");
- System.out.println("testHash=================begin");
- testHash(jedis);
- System.out.println("testHash=================end");
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- finally {
- jedisPool.returnResource(jedis);
- }
- }
- private static void testString(Jedis jedis) {
- String key = "test:string:a";
- // 為了保持多次測試結果一樣,每次開始時都刪除
- jedis.del(key);
- String value = "hello redis";
- jedis.set(key, value);
- String val = jedis.get(key);
- System.out.println(val);
- // 結果:hello redis
- }
- private static void testList(Jedis jedis) {
- String key = "test:list:a";
- // 為了保持多次測試結果一樣,每次開始時都刪除
- jedis.del(key);
- List<String> values = new ArrayList<>();
- for (int i = 0; i < 10; i++) {
- char c = (char) (65 + i);
- values.add(String.valueOf(c));
- }
- for (int i = 0; i < values.size(); i++) {
- jedis.lpush(key, values.get(i));
- }
- List<String> val = jedis.lrange(key, 0, -1);
- System.out.println(val);
- // 結果:[J, I, H, G, F, E, D, C, B, A]
- }
- private static void testSet(Jedis jedis) {
- String key = "test:set:a";
- // 為了保持多次測試結果一樣,每次開始時都刪除
- jedis.del(key);
- Set<String> values = new HashSet<>();
- for (int i = 0; i < 10; i++) {
- char c = (char) (65 + i);
- values.add(String.valueOf(c));
- }
- Iterator<String> ite = values.iterator();
- while (ite.hasNext()) {
- String value = ite.next();
- jedis.sadd(key, value);
- }
- Set<String> val = jedis.smembers(key);
- System.out.println(val);
- // 結果:[D, E, F, G, A, B, C, H, I, J]
- }
- private static void testSortedSet(Jedis jedis) {
- String key = "test:sortedset:a";
- // 為了保持多次測試結果一樣,每次開始時都刪除
- jedis.del(key);
- String[] values = { "C", "B", "G", "D", "d" };
- jedis.zadd(key, 10, "E");
- for (int i = 0; i < values.length; i++) {
- jedis.zadd(key, i + 10, values[i]);
- }
- jedis.zadd(key, 10, "F");
- Set<String> val = jedis.zrange(key, 0, -1);
- System.out.println(val);
- // 結果:[C, E, F, B, G, D, d]
- }
- private static void testHash(Jedis jedis) {
- String key = "test:hash:a";
- // 為了保持多次測試結果一樣,每次開始時都刪除
- jedis.del(key);
- Map<String, String> values = new HashMap<>();
- for (int i = 0; i < 10; i++) {
- String s = String.valueOf((char) (i + ‘A‘));
- values.put(s, s + "_val");
- }
- Iterator<Entry<String, String>> ite = values.entrySet().iterator();
- while (ite.hasNext()) {
- Entry<String, String> entry = ite.next();
- String k = entry.getKey();
- String v = entry.getValue();
- jedis.hset(key, k, v);
- }
- Map<String, String> val = jedis.hgetAll(key);
- System.out.println(val);
- // 結果:{D=D_val, E=E_val, F=F_val, G=G_val, A=A_val, B=B_val, C=C_val,
- // H=H_val, I=I_val, J=J_val}
- }
- }
redis數據結構