redis学习——数据类型
一、內容簡介
Redis不僅僅是簡單的key-value 存儲器,同時也是一種data structures server。傳統的key-value是指支持使用一個key字符串來索引value字符串的存儲,而Redis中,value不僅僅支持字符串,還支 持更多的復雜結構,包括列表,集合,哈希表等。現在我們一一講解:Redis keys是采用二進制安全,這就意味著你可以使用任何二進制序列作為重點,從像"foo"可以聯系一個 JPEG 文件。空字符串也是一個有效的密鑰。
二、準備
啟動服務
service redis-server start
啟動客戶端
redis-cli
三、Redis Strings(redis字符串)
字符串是一種最基本的Redis值類型。Redis字符串是二進制安全的,這意味著一個Redis字符串能包含任意類型的數據,例如: 一張JPEG格式的圖片或者一個序列化的Ruby對象。一個字符串類型的值最多能存儲512M字節的內容
1??創建和檢索strings命令——set、get
set key value?? ***set命令將取代現有的任何已經存在的key***
get key
2??創建strings時加一步check——set nx、set xx
???? *如果key已存在,則無法創建
???? set key value nx
???? *如果key已存在,依然創建并取代現有已存在的key
???? set key value xx
3??strings字符串類型可以做加法器——incr、incrby、decr、decrby
???? incr key使其value變成整數并運行value+1
???? incrby keyn 使其value變成整數并運行value+n
???? 對應的減法器命令
???? decr,decrby
4??批量創建? mset、mget
???? mset key1 value1 key2 value2 key3 value3
???? mget key1 key2 key3
四、Redis Lists (redis列表)
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊) LPUSH 命令插入一個新的元素導頭部, 而 RPUSH插入一個新元素導尾部.當一個這兩個操作在一個空的Key上被執行的時候一個新的列表被創建。相似的,如果一個列表操作清空一個列表那么對應的 key將被從key空間刪除。這是非常方便的語義,因為他們被調用使用一個空列表完全就像他們被調用時使用一個不存在的鍵值(可以)做為參數。
1??創建、查看、刪除——lpush、rpush、lrange、del
???? *創建列表,并從列頭插入(左邊插入)
???? lpush?key value1 value2 value3
???? *創建列表,并從列尾插入(右邊插入)
???? rpush?key value4 value5 value6
???? *查看列表內的字符串value
???? lrange?key 0 -1 ? ***0即列首-正數第一個,-1即列尾-倒數第一個
???? 列表內排列順序為
1)value3
2)value2
3)value1
4)value4
5)value5
6)value6
??? *刪除列表key
??? del key
2??從列表key中取出并顯示元素——lpop、rpop
??? *從列表key中取出并顯示元素第一個元素
??? lpop key
??? *從列表key中取出并顯示元素倒數第一個元素 rpop key
三、Redis Hashes(redis 哈希)
Redis Hashes是字符串字段和字符串值之間的映射,因此他們是展現對象的完美數據類型。 (例如:一個有名,姓,年齡等等屬性的用戶):一個帶有一些字段的hash僅僅需要一塊很小的空間存儲,因此你可以存儲數以百萬計的對象在一個小的 Redis實例中。 哈希主要用來表現對象,他們有能力存儲很多對象,因此你可以將哈希用于許多其他的任務。?????
Redis hash 是一個string類型的field和value的映射表,hash特別適合用于存儲對象。
Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)。
1??創建、檢索redis hashes——hset、hmset、hget、hgetall、hdel
???? *創建哈希key并添加一對映射
???? hset?key filed0 value0
???? *創建哈希hash2并添加多對映射
???? hmset?key field1:value1 field2:value2 field3:value3
???? *查看key中的某個映射
???? hget?key field1
???? *查看key中所有映射
hgetall key
???? *追加一對映射
???? hset?key filed4 value4
???? *追加多對映射
hmset?key field5:value5 field6:value6 field7:value7
???? *刪除key中的一對或多對映射
????? hdel?key field4 field5
?2??加法操作并顯示——hincrby
????? hincrby?key field2 n
四、Redis set(redis 無序集合)
Redis 集合(Set)是一個無序的字符串集合. 你可以以O(1)的時間復雜度 (無論集合中有多少元素時間復雜度都是常量)完成添加,刪除,以及測試元素是否存在。 Redis 集合擁有令人滿意的不允許包含相同成員的屬性。多次添加相同的元素,最終在集合里只會有一個元素。 實際上說這些就是意味著在添加元素的時候無須檢測元素是否存在。 一個Redis集合的非常有趣的事情是他支持一些服務端的命令從現有的集合出發去進行集合運算,因此你可以在非常短的時間內進行合并(unions), 求交集(intersections),找出不同的元素(differences of sets)。
Redis的Set是string類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。
Redis 中 集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。
集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)
1??創建、顯示無序集合——sadd、smembers
???? *創建一個無序集合key
?????? sadd key member1 member2 member3
???? *查看無序集合內成員
?????? smember key
2??判斷member1元素是否是集合set1的成員
??? sismember?key member1
?? 是返回1,否返回0
五、Redis sorted set(redis 有序集合)
Redis有序集合與普通集合非常相似,是一個沒有重復元素的字符串集合。不同之處是有序集合的沒有成員都關聯了一個評分,這個評分被用來按照從最低分到 最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重復了。 使用有序集合你可以以非常快的速度(O(log(N)))添加,刪除和更新元素。因為元素是有序的, 所以你也可以很快的根據評分(score)或者次序(position)來獲取一個范圍的元素。訪問有序集合的中間元素也是非常快的,因此你能夠使用有序 集合作為一個沒有重復成員的智能列表。在有序集合中,你可以很快捷的訪問一切你需要的東西:有序的元素,快速的存在性測試,快速訪問集合的中間元素! 簡而言之使用有序集合你可以做完成許多對性能有極端要求的任務,而那些任務使用其他類型的數據庫真的是很難完成的。
Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復的成員。
不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
有序集合的成員是唯一的,但分數(score)卻可以重復。
集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。
1??創建有序集合,并添加成員——zadd
???? ZADD key score1 member1 [score2 member2]??
? ?? **score可以重復,有相同score的member會按照字母或數字排列
2??查看有序集合成員——zrange、zrevrange
? ? 正序查看
? ? zrange key
? ? 倒序查看
? ? zrevrange key
??? *默認不顯示score,如果需要顯示,添加withscore參數
??? zrange key withscore
??? zrevrange key withscore
?
更詳細的命令介紹,參考http://www.runoob.com/redis/redis-sorted-sets.html
?
?
?
?
?
???
轉載于:https://www.cnblogs.com/roger888/p/6093923.html
總結
以上是生活随笔為你收集整理的redis学习——数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入剖析ThreadLocal实现原理以
- 下一篇: iframe里面的元素触发父窗口元素事件