datagrid如何获取一行数据中的某个字段值_redis 所支持的数据类型以及其应用场景...
1.支持的數據類型
redis 支持 String、hash、list、set、Sort set這幾種數據類型,可用于緩存、事件發布訂閱、高速隊列等場景。
String是最常用的數據類型,它能夠存儲任何類型的字符串,當然也包括二進制、JSON化的對象、甚至是base64編碼之后的圖片。在Redis中一個字符串最大的容量為512MB。
Hash常用作存儲結構化數據、比如論壇系統中可以用來存儲用戶的Id、昵稱、頭像、積分等信息。如果需要修改其中的信息,只需要通過Key取出Value進行反序列化修改某一項的值,再序列化存儲到Redis中,Hash結構存儲,由于Hash結構會在單個Hash元素在不足一定數量時進行壓縮存儲,所以可以大量節約內存。這一點在String結構里是不存在的。
List的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷,Redis 內部的很多實現,包括發送緩沖隊列等也都是用的這個數據結構。另外,可以利用 lrange 命令,做基于 Redis 的分頁功能,性能極佳,用戶體驗好。
set 對外提供的功能與 list 類似是一個列表的功能,特殊之處在于 set 是可以自動排重的,當你需要存儲一個列表數據,又不希望出現重復數據時,這個時候就可以選擇使用set。
可以按照某個條件的權重進行排序,比如可以通過點擊數做出排行榜的數據應用。
2 String 常用命令
2.1賦值與取值
SET key value
GET key
2.2 向尾部追加值
APPEND key value
APPEND的作用是向鍵值的末尾追加value。如果鍵不存在則將該鍵的值設置為value,即相當于SET key value。返回值是追加后字符串的總長度。
2.3 獲取字符串長度
STRLEN key
STRLEN命令返回鍵值的長度,如果鍵不存在則返回0。
2.4 同時設置/獲取多個鍵值
MSET key value [key value …]
MGET key [key …]
2.5 刪除key的值
del key
2.6 判斷key否存在
exists key
2.7 若key不存在,則存儲
setnx key
2.8 設置key的有效期,并存儲數據
setex key 時間(seconds) 新value
2.9 getrange 截取value
GETRANGE KEY_NAME start end
3 hash 常用命令
hash叫散列類型,它提供了字段和字段值的映射。字段值只能是字符串類型,不支持散列類型、集合類型等其它類型。
3.1 賦值與取值
HSET key field value 一次只能設置一個字段值
HGET key field 一次只能獲取一個字段值
HMSET key field value [field value ...] 一次可以設置多個字段值
HMGET key field [field ...] 一次可以獲取多個字段值
HGETALL key
3.2 判斷字段是否存在
HEXISTS key field
當字段不存在時賦值,類似HSET,區別在于如果字段已經存在,該命令不執行任何操作。
3.3 只獲取字段名或字段值
HKEYS key
HVALS key
3.4 獲取字段數量
HLEN key
3.5 jedis的簡單應用
public static void testHash() {
Jedis jedis = RedisUtil.getJedis();
try {
Map student = new HashMap();
pairs.put("name", "zhangsan");
pairs.put("age", "10");
pairs.put("sex", "Female");
jedis.hmset("test", student)
List name = jedis.hmget("student", "name");// 結果是個泛型的LIST
System.out.println(name);
jedis.hdel("student","age"); //刪除map中的某個鍵值
System.out.println(jedis.hmget("student", "age")); // 因為刪除了,所以返回的是null
System.out.println(jedis.hlen("student")); // 返回key為user的鍵中存放的值的個數
System.out.println(jedis.exists("student"));// 是否存在key為user的記錄
System.out.println(jedis.hkeys("student));// 返回map對象中的所有key
System.out.println(jedis.hvals("student"));// 返回map對象中的所有value
Iterator iter = jedis.hkeys("student").iterator();
while (iter.hasNext()) {
String key = iter.next();
System.out.println(key + ":" + jedis.hmget("student", key));
}
System.out.println(jedis.hkeys("student"));
System.out.println(jedis.hvals("student"));
System.out.println(jedis.hgetAll("student"));
// 清空數據
System.out.println(jedis.flushDB());
// 添加數據
jedis.hset("student2", "key", "value");
jedis.hset("student2", "key1", "value1");
jedis.hset("student2", "key2", "value2");
// 判斷某個值是否存在
System.out.println(jedis.hexists("student2", "key"));
// 獲取指定的值
System.out.println(jedis.hget("student2", "key")); // 批量獲取指定的值
System.out.println(jedis.hmget("student2", "key", "key1"));
// 刪除指定的值
System.out.println(jedis.hdel("student2", "key"));
// 為key中的域 field 的值加上增量 increment
System.out.println(jedis.hincrBy("student2", "key", 123l));
// 獲取所有的keys
System.out.println(jedis.hkeys("student2"));
// 獲取所有的values
System.out.println(jedis.hvals("student2"));
} catch (Exception e) {
e.printStackTrace();
} finally {
RedisUtil.getPool().returnResource(jedis);
}
}
4 list 常用命令
列表類型(list)可以存儲一個有序的字符串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個片段。
列表類型內部是使用雙向鏈表(double linked list)實現的,所以向列表兩端添加元素的時間復雜度為0(1),獲取越接近兩端的元素速度就越快。這意味著即使是一個有幾千萬個元素的列表,獲取頭部或尾部的10條記錄也是極快的。
4.1 向列表兩端增加元素
LPUSH key value [value ...]
RPUSH key value [value ...]
4.2 從列表兩端移除元素
LPOP key
RPOP key
4.3 獲取列表中元素的個數
LLEN key
4.4 獲取列表片段
LRANGE key start stop
4.5 將一個元素從一個列表轉移到另一個列表中
RPOPLPUSH source destination
移動的元素遵循被移除列表的先進先出原則
4.6 刪除
LTRIM KEY_NAME START STOP
5 set 常用命令
在集合中的每個元素都是不同的,且沒有順序。
集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,由于集合類型的Redis內部是使用值為空的散列表實現,所有這些操作的時間復雜度都為0(1)。
Redis還提供了多個集合之間的交集、并集、差集的運算。
5.1 增加/刪除元素
SADD key member [member ...]
SREM key member [member ...]
5.2 獲取集合中所有的元素
SMEMBERS key
判斷元素是否在集合中,無論集合中有多少元素都可以極速的返回結果。
SISMEMBER key member
6 sorted set
在集合類型的基礎上有序集合類型為集合中的每個元素都關聯一個分數,這使得我們不僅可以完成插入、刪除和判斷元素是否存在在集合中,還能夠獲得分數最高或最低的前N個元素、獲取指定分數范圍內的元素等與分數有關的操作。
在某些方面有序集合和列表類型有些相似。
1、二者都是有序的。
2、二者都可以獲得某一范圍的元素。
但是,二者有著很大區別:
1、列表類型是通過鏈表實現的,獲取靠近兩端的數據速度極快,而當元素增多后,訪問中間數據的速度會變慢。
2、有序集合類型使用散列表實現,所有即使讀取位于中間部分的數據也很快。
3、列表中不能簡單的調整某個元素的位置,但是有序集合可以(通過更改分數實現)
4、有序集合要比列表類型更耗內存。
6.1 增加元素
向有序集合中加入一個元素和該元素的分數,如果該元素已經存在則會用新的分數替換原有的分數。返回值是新加入到集合中的元素個數,不包含之前已經存在的元素。
ZADD key score member [score member ...]
6.2 獲取元素的分數
ZSCORE key member
6.3 獲得排名在某個范圍的元素列表
元素分數從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)
ZRANGE key start stop [WITHSCORES]
元素分數從大到小的順序返回索引從start到stop之間的所有元素(包含兩端的元素)
ZREVRANGE key start stop [WITHSCORES]
如果需要獲得元素的分數的可以在命令尾部加上"WITHSCORES"參數
6.4 獲得指定分數范圍的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
6.5 增加某個元素的分數,返回值是更改后的分數。
ZINCRBY key increment member
6.6 獲得集合中元素的數量
ZCARD key
6.7 獲得指定分數范圍內的元素個數
ZCOUNT key min max
6.8 獲取元素下標
zscore key member
6.9 刪除元素
zrem key member
6.10 按照排名范圍刪除元素
ZREMRANGEBYRANK key start stop
6.11 按照分數范圍刪除元素
ZREMRANGEBYSCORE key score score
6.12 獲取元素的排名
從小到大
ZRANK key member
從大到小
ZREVRANK key member
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的datagrid如何获取一行数据中的某个字段值_redis 所支持的数据类型以及其应用场景...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: inner join 和 exists
- 下一篇: python爬取岗位数据并分析_区块链岗