Redis 5種數據類型


基於redis5

 

1:字符串類型

 

它可以存儲任何類型的字符串,包括json字符串,二進制數據,允許最大容量為512MB

 

1:賦值和取值

 

set name 123rrr

get name

 

 

2:增加指定的整數(可以指定+多少)

INCR count   自動+1
INCRBY count 2 指定加多少

 

 

3:減少指定整數(自動-1:指定加多少)

 

decr count
decrby count  2

 

 

 

4:增加浮點數

 

incrbyfloat count2 0.1

 

 

 

5:向尾部追加值(如果鍵不存在,就直接設置成追加的值)

 

append name ss

 

 

6:獲取字符串長度(中文占3個)

 

strlen name

127.0.0.1:6379> set name 北京西站
OK
127.0.0.1:6379> strlen name
(integer) 12

 

 

 7:同時獲取多個鍵

 

mget count2 name1 name

 

 

 

8:同時設置多個鍵值對

 

mset wanfei 123 wanlong 444

 

 

 

2:散列類型(hash)

 

散列類型(hash)的鍵值也是一種字典結構,其存儲了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他數據類型,一個散列類型鍵可以包含至多232−1個字段。

 

 

 

 

 

 

1:設置鍵

hset post:1 title redis入門
hset post:1 created_by 1

2:獲取某個字段(獲取文章1 的標題)

hget post:1 title

 

 3:獲取鍵的所有字段和值

 hgetall post:1

 

   獲取所有的鍵不需要值

hkeys post:1

 

   獲取所有的值

 hvals post:1

 

4:獲取多個字段的值

hmget post:1 title created_by

 

5:設置多個字段值

hmset post:1 deleted_at 222 updated_at 333

 

6:判斷鍵的字段是否存在(不存在返回0)

hexists post:1 title

 

7:增加字段值數字

hincrby post:1 click 1

 

8:刪除字段

hdel post:1 title click

 

 

3:列表類型

 

 

列表類型(list)可以存儲一個有序的字符串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個片段。列表類型內部是使用雙向鏈表(doublelinkedlist)實現的
借助列表類型,Redis還可以作為隊列使用,4.4節會詳細介紹。與散列類型鍵最多能容納的字段數量相同,一個列表類型鍵最多能容納232−1個元素。

 

 1:向列表的左邊添加值(添加完會返回列表中現在的個數) (列表中元素是可以重復的)

lpush posts post:1 

 

2:向列表的右邊添加值 

rpush posts posts:2

 

3:向列表中添加多個

lpush posts posts:1 post:2 post:3

 

4:彈出列表中的值(彈出之后列表中就沒有這個值了)

左側的第一個   lpop posts
右側的第一個   rpop posts

 

5:獲取列表中元素的個數

llen posts

 

6:獲取列表中指定位置到指定位置的元素(獲取了不會刪除這些)

lrange posts 0 2   redis的下標也是從0開始 一共獲取了3個

 

沒有從右邊開始截取的命令,但是可以用負數

lrange posts -3 -1

 

從倒數第3個截取到倒數第一個

lrange posts 0 -1  可以列出所有的鍵

 

7:刪除元素

lrem posts -2 post:7   從右邊找 刪除兩個元素為post:7的

lrem posts 2 post:1 從左邊找 刪除兩個元素為post:1的

 

1)當count>0時LREM命令會從列表左邊開始刪除前count個值為value的元素。
2)當count<0時LREM命令會從列表右邊開始刪除前count個值為value的元素。
3)當count=0是LREM命令會刪除所有值為value的元素

 

8:獲取指定下標的元素

lindex posts 3 左邊的第4個下標0
lindex post -3 右邊第3個

 

9:設置下標的元素的值

lset posts 0 post:0  左邊第一個

 

10:只保留某些元素

ltrim posts 0 5   只保留這6個元素,其他全部刪除

 

11:插到指定元素的前面后面

linsert posts after post:5 post:6      從左開始查找post:5元素然后將post:6插到它后頭
linsert posts brefore post:5 post:6
從左開始查找post:5元素然后將post:6插到它前面

 

12:將列表元素移動到寧一個列表中(posts右邊第一個移動到postTemp中的左邊)

rpoplpush posts postsTemp

 

 

4:集合類型 (set)

 

 

集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,由於集合類型在Redis內部是使用值為空的散列表(hashtable)實現的,集合的值不能重復

 

 

 1:添加

sadd posts post:1

 

2:刪除值

srem posts post:1 post:2

 

3:獲取所有值

smembers posts

 

4:比較兩個集合,找不不一樣的值 :場景  找出標簽是 JAVA,Golang,Sql 這三個標簽的文章

sdiff post:java post:net (post:java 有的post:net 沒有的)
sdiff post:java post:net post:php (post:java 有的post:net 沒有的,再拿這些不同的值和post:php比較 如果post:php 有就刪除,剩下的就是只有post:java有的他們都沒有的)

 

5:計算多個集合的交集

sinter post:java post:net    (post:java有的post:net也有的)
sinter post:java post:net post:php   (3個都有的)

 

6:計算幾個集合所有的元素不重復

sunion post:java post:net post:php

 

7:集合的個數

scard post:java

 

8:將集合運算的結果存到集合中(會返回計算的結果個數)

sdiffstore destination post:java post:net  (不同) (存到destination中)
sinterstore destination post:java post:net (交集)
sunionstore destinaction post:java post:net (並集)

 

9:隨機從集合中取出元素(不會刪除) (后面是每次隨機取出多少個) 如果是-100 而且元素個數還沒有100個就會出現重復的

srandmember post:java 1

 

10:隨機彈出某個元素

spop post:java

 

5:有序集合zset

 

1 有序集合類型(sortedset)的特點從它的名字中就可以猜到,
2 它與介紹的集合類型的區別就是有序二字。
3 在集合類型的基礎上有序集合類型為集合中的每個元素都關聯了一個分數,
4 這使得我們不僅可以完成插入、刪除和判斷元素是否存在等集合類型支持的操作,
5 還能夠獲得分數最高(或最低)的合可以(通過更改這個元素的分數)。
6 有序集合要比列表類型更耗費內存。
7 有序集合類型算得上是Redis的5種數據類型中最高級的類型了,
8 在學習時可以與列表類型和集合類型對照理解

 

 

1:增加修改元素(添加多個,分數-值)

ZADD result 89 Tom 67 Peter 100 David

ZADD result 80 Tom 修改Tom的分數

zadd result +inf ymh 添加一個無限大的值,如果多個的話就按添加的順序,后加的大
zadd result -inf wlphp 添加一個無限小的值,如果多個的話,先加的小
 
        

 

 2:獲取元素的分數

zscore result wlphp

 

 3:按順序找元素

zrange result 0 2  從小到大 第0個到第2個

zrevrange result 0 2 從大到小 最后一個到倒數第3個

zrange result 0 -1 從小到大排列所有的
zrange result 0 -1  withscores 會將分數值一起輸出

 

如果兩個元素的分數相同,Redis會按照字典順序(即0<9<A<Z<a<z這樣的順序) 中文依舊,轉成UTF8 編碼之后還是這種順序

4:獲取指定分數之間的元素

zrangebyscore result 50 80   (50分到80分的)

zrangebyscore result 50 (80 在分數前加個( 就表示不包含這個值,意思就是大於等於50 小於80分的
zrangebyscore result 50 +inf  50分到無窮大分數,意思就是大於50分的
zrangebyscore result -inf 50  50分到無窮小分數,意思就是小於50分的
zrangebyscore result -inf +inf  無窮小到無窮大, 所有的

 

5:分頁功能(牛皮🐂)

 跟mysql 無太大差別 limit offset count   下標,取多少個

zrangebyscore result -inf +inf limit 0 2  

zrevrangebyscore result 100 -inf limit 0 2 低於100分的頭兩人
zrevrangebyscore是把分數按大到小排序的

 

 6:分數++ 比如張安琪很老實給他加個兩分,突然狂皮再減去兩分

zincrby result 2 zhanganqi
zincrby result -2 zhanganqi

 

如果指定的元素不存在,Redis在執行命令前會先建立它並將它的分數賦為0再執行操作

 

7:獲取有序集合的元素個數

zcard result

 

 8:獲取指定分數范圍內元素的個數

zcount result 10 20

 

9:刪除元素

zrem result wlphp ymh

zremrangebyrank result 0 1 按照排名范圍刪除元素

zremrangebyscore result 10 50 按照分數范圍刪除元素

 

 10:獲取元素排名

zrank result ymh (從小到大)

zrevrank result ymh (從大到小)

 

 11:獲取兩個有序集合的交集

aggregate min 就會比較兩個集合的值去最小的值,max就取最大的值
 zinterstore des 2 result1  result aggregate max 

 

 

zinterstore des 2 result1  result aggregate max weights 0.1 0.5   計算兩個結果的交接  都取最大的值 第一個集合的結果*0.1 第二個*0.5,如果權重一個是0.1 一個是1 的話就會都*1 

 

計算有序集合的交集,並將結果保存起來

語法:ZINTERSTORE destination numkeys [WEIGHTS weight weight...] [AGGREGATE SUM | MIN | MAX]

destination :代表計算結果保存的地方

Numkeys: 代表你要計算幾個集合的交集

WEIGHTS :代表權重,它可以設置每個元素的權重,也就是在每個元素參與計算時,元素的分數會乘以你指定的一個權重。

[AGGREGATE SUM | MIN | MAX]:代表元素如果有交集,是計算它的和、最大值還是最小值。

  

 

!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM