Redis 學習之數據類型

来源:http://www.cnblogs.com/jalja/archive/2017/02/19/6410803.html
-Advertisement-
Play Games

String是最簡單的類型,一個key對應一個Value,string類型是二進位安全的。redis的string可以包含任何數據類型,比如jpg圖片或者序列化的對象。 Redis hash 是一個string類型的filed和value的映射表、它的添加、刪除操作都是0、1(平均操作)。Hash特... ...


該文使用centos6.5 64位 redis-3.2.8

[root@localhost bin]# netstat -tunpl |grep 6379  查看redis 是否啟動成功

一、String類型

String是最簡單的類型,一個key對應一個Value,string類型是二進位安全的。redis的string可以包含任何數據類型,比如jpg圖片或者序列化的對象。

 

1、set方法:設置key對應的值為string類型的value,如果該key已經存在,則覆蓋key對應的value值。所以在redis中key只能有一個。
127.0.0.1:6379> set name lijie
2、get:根據key獲取value值
127.0.0.1:6379> get name
3、Setnx:設置key對應的值為tring類型的value,如果key已經存在,返回0 表示無法再對該key設置新值,返回1 表示設置新值成功,nx是not exit的意思。
127.0.0.1:6379> setnx name zs
(integer) 0
127.0.0.1:6379> setnx age 20
(integer) 1
4、setex:設置key對應的值為string類型的value,並指定該key-value對應的有效期。
127.0.0.1:6379> setex color 10 red
OK
立即查詢
127.0.0.1:6379> get color
"red"
10秒後查詢
127.0.0.1:6379> get color
(nil)
5、Setrange:設置指定key的value值的子字元竄。
127.0.0.1:6379> set email [email protected]
OK
127.0.0.1:6379> get email
"[email protected]"
127.0.0.1:6379> setrange email 6 163.com
(integer) 14
127.0.0.1:6379> get email
"[email protected]"
6、Mset:一次設置多個key-value,返回OK表示全部設置成功,返回0表示全部失敗
127.0.0.1:6379> mset name1 zs name2 ls
OK
127.0.0.1:6379> get name1
"zs"
127.0.0.1:6379> get name2
"ls"
7、msetnx:一次設置多個key-value,返回1表示全部設置成功,返回0表示全部失敗。該方式不會覆蓋已經存在的key
127.0.0.1:6379> msetnx name3 kk name4 mm name2 LL
(integer) 0
127.0.0.1:6379> get name3
(nil)
127.0.0.1:6379> get name4
(nil)
8、getset:設置key值,並返回key的舊值
127.0.0.1:6379> getset name4 UU
(nil)
127.0.0.1:6379> get name4
"UU"
127.0.0.1:6379> getset name4 RR
"UU"
9、getrange:獲取key對應value的子字元串
127.0.0.1:6379> get email
"[email protected]"
127.0.0.1:6379> getrange email 0 4
"jalja"
10、mget:一次獲取多個key對應的value值,不存在返回nil
127.0.0.1:6379> mget name1 name2 name3 name4 name5
1) "zs"
2) "ls"
3) (nil)
4) "RR"
5) (nil)
11、incr:對key對應的value做加加操作,並返回新值
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> incr age
(integer) 21
12、incrby:與incr類似,加指定值,key不存在的時候會設置key,並認為該key原來的value=0
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> incrby age 9
(integer) 30
127.0.0.1:6379> incrby age -5
(integer) 25
127.0.0.1:6379> incrby height 10
(integer) 10
13、decr:對key對應的value做遞減操作
127.0.0.1:6379> get height
"10"
127.0.0.1:6379> decr height
(integer) 9
127.0.0.1:6379> decr height
(integer) 8
14、decrby:對key對應的value減去指定的值
127.0.0.1:6379> get height
"8"
127.0.0.1:6379> decrby height 3
(integer) 5
127.0.0.1:6379> decrby height -3
(integer) 8
15、append:對key對應的vlaue字元串追加,返回新字元串的長度
127.0.0.1:6379> get name1
"zs"
127.0.0.1:6379> append name1 ML
(integer) 4
127.0.0.1:6379> get name1
"zsML"
16、strlen:獲取key對應value的長度
127.0.0.1:6379> get name1
"zsML"
127.0.0.1:6379> strlen name1
(integer) 4

 

二、Hash 類型 

Redis hash 是一個string類型的filed和value的映射表、它的添加、刪除操作都是0、1(平均操作)。Hash特別適合存儲對象。相較於對象的每個欄位存成單個string類型。將一個對象存儲在hash類型中會占用更少的記憶體,並且可以更方便存取整個對象。

1、hset:設置hash filed 為指定值,如果key不存在,則先創建。
127.0.0.1:6379> hset user:001 name zs
(integer) 1
127.0.0.1:6379> hget user:001 name
"zs"
設置一個user:001 的用戶的name為zs(可以將user:001看做一個表)
2、 hsetnx:設置hash filed 為指定值,如果key不存在,則先創建。如果存在則返回0表示設置失敗。
127.0.0.1:6379> hsetnx user:001 name ML
(integer) 0
127.0.0.1:6379> hsetnx user:001 age 1
(integer) 1
3、hmset:同時設置hash的多個file
127.0.0.1:6379> hmset user:002 name MM age 20
OK
127.0.0.1:6379> hget user:002 name
"MM"
127.0.0.1:6379> hget user:002 age
"20"
4、hmget:獲取全部指定的hash filed
127.0.0.1:6379> hmget user:002 name age
1) "MM"
2) "20"
5、hincrby:對hash filed加上指定的值
127.0.0.1:6379> hget user:002 age
"20"
127.0.0.1:6379> hincrby user:002 age 5
(integer) 25
127.0.0.1:6379> hincrby user:002 age -5
(integer) 20
6、hexists:測試指定的filed是否存在,返回1表示存在,返回0表示不存在
127.0.0.1:6379> hexists user:002 name
(integer) 1
127.0.0.1:6379> hexists user:002 age
(integer) 1
127.0.0.1:6379> hexists user:002 height
(integer) 0
7、hlen:返回指定hash的field的數量
127.0.0.1:6379> hlen user:002
(integer) 2
8、hdel 刪除指定hash 的filed欄位,返回1表示刪除成功0:表示刪除失敗
127.0.0.1:6379> hget  user:002 age
"20"
127.0.0.1:6379> hdel user:002 age
(integer) 1
127.0.0.1:6379> hdel user:002 age
(integer) 0
127.0.0.1:6379> hget user:002 age
(nil)
9、hkeys:返回hash 的所有filed
127.0.0.1:6379> hkeys user:001
1) "name"
2) "age"
127.0.0.1:6379> hkeys user:002
1) "name"
10、hvals:返回hash的所有value
127.0.0.1:6379> hvals user:001
1) "zs"
2) "1"
127.0.0.1:6379> hvals user:002
1) "MM"

三、List類型 

List是一個鏈表結構,主要功能是push、pop,獲取一個範圍的所有值等等,操作中key理解為鏈表的名字。Redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。我們可以通過push、pop操作鏈表的頭部或者鏈表尾部添加元素,這樣list既可以作為棧,又可以作為隊列。

 

1、Lpush:在key對應list的頭部添加字元串元素,返回list中元素的個數
127.0.0.1:6379> lpush list1 "hello"
(integer) 1
127.0.0.1:6379> lpush list1 "word"
(integer) 2
2、lrange:獲取list中的元素,
127.0.0.1:6379> lrange list1 0 -1(0:第一個,-1:最後一個)
1) "word"
2) "hello"
3、rpush:在key對應的list尾部添加元素
127.0.0.1:6379> rpush list2 10
(integer) 1
127.0.0.1:6379> rpush list2 11
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "11"
4、Linsert:在key對應list的特定位置前或後添加字元串
127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "11"
127.0.0.1:6379> linsert list2 before 11 10.5
(integer) 3
127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "10.5"
3) "11"
5、lset:更改list中指定下標的元素,返回ok表示設置成功
127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "10.5"
3) "11"
127.0.0.1:6379> lset list2 1 10.00
OK
127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "10.00"
3) "11"
6、lrem:從key對應list中刪除n個和value相同的元素(n<0 從尾部刪除,n=0 全部刪除)
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"

7、ltrim:保留list中指定範圍的數據
127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "10.00"
3) "11"
4) "12"
127.0.0.1:6379> ltrim list2 1 2
OK
127.0.0.1:6379> lrange list2 0 -1
1) "10.00"
2) "11"
8、lpop:從list的頭部刪除元素,並返回該元素
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lpop list
"two"
127.0.0.1:6379> lrange list 0 -1
1) "one"
9、rpop:從list尾部刪除元素,並返回該元素
10、rpoplpush:從第一個list的尾部刪除元素,並添加到第二個list的頭部
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) "hello"
127.0.0.1:6379> rpoplpush list1 list
"hello"
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
127.0.0.1:6379> lrange list1 0 -1
1) "word"
11、lindex 返回名稱為key的list中index位置的元素
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
127.0.0.1:6379> lindex list 1
"one"
12、llen:返回指定key對應list的長度
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
127.0.0.1:6379> llen list
(integer) 2

 

四、Sets類型

 

Set是一個string類型的無序集合,不允許重覆。Set是通過hash table實現的。添加、刪除、查找的複雜度都是0(1)。對集合我們可以取並集、交集、差集。通過這些操作我們可以實現sns中的好友推薦和blog的tag功能。

1、 sadd:向key對應的set集合中添加元素,返回1表示添加成功,返回0 表示失敗
127.0.0.1:6379> sadd myset1 one
(integer) 1
127.0.0.1:6379> sadd myset1 two
(integer) 1
2、Smembers:查看set集合中的元素
127.0.0.1:6379> smembers myset1
1) "two"
2) "one"
3、srem:刪除key對應set集合中的元素,返回1表示刪除成功 0表示失敗
127.0.0.1:6379> srem myset1 two
(integer) 1
4、spop:隨機刪除set中的一個元素並返回該元素
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
3) "four"
127.0.0.1:6379> spop myset1
"four"
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
5、sdiff:返回給定set集合的差集 (以在前的set集合為標準)
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sdiff myset1 myset2
1) "three"
127.0.0.1:6379> sdiff myset2 myset1
1) "two"
6、sdiffstore:返回所有給定set集合的差集,並將差集添加到另外一個集合中
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sdiffstore myset3 myset1 myset2
(integer) 1
127.0.0.1:6379> smembers myset3
1) "three"
7、sinter:返回所有給定集合的交集
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sinter myset1 myset2
1) "one"
8、sinterstore:返回所有給定集合key的交集,並將結果存為另一個key
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sinterstore myset4 myset1  myset2
(integer) 1 
9、返回所有給定集合的並集
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sunion myset1 myset2
1) "three"
2) "two"
3) "one"
10、sunionstore 返回所有給定集合的並集,並將結果存入另一個集合
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sunionstore myset5  myset1 myset2
(integer) 3
11、smove:從第一個集合中移除元素並將該元素添加到另一個集合中。
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset5
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> smove myset5 myset1 two
(integer) 1
127.0.0.1:6379> smembers myset5
1) "three"
2) "one"
127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"
12、Scard:返回set集合中元素的個數
127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> scard myset1
(integer) 3
13、sismember:測試member元素是否是名稱為key的set集合 返回1:表示是 0:不是
127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> sismember myset1 tree
(integer) 0
127.0.0.1:6379> sismember myset1 three
(integer) 1
14、srandmember:隨機返回set集合中的一個元素,但不刪除該元素
127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379>  srandmember myset1
"one"

五、Sorted set (zset)類型

Sorted set是set的一個升級版,他在set的基礎上增加了一個順序屬性,這一屬性在添加元素的時候可以指定,每次指定後,zset會自動重新按新的值挑戰順序。可以理解為有兩列的mysql表,一列存value,一列存順序。操作key理解為zset的名字
1、zadd:向有序集合zset中添加元素並指定順序,如果該元素已存在就更新元素順序。
127.0.0.1:6379> zadd myzset1 1 one
(integer) 1
127.0.0.1:6379> zadd myzset1 2 two
(integer) 1
2、zrange:從zset集合中取元素 [withscores] 輸出元素順序號
127.0.0.1:6379> zadd myzset1 1 one
(integer) 1
127.0.0.1:6379> zadd myzset1 2 two
(integer) 1
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
3、zrem:刪除zset集合中指定的元素
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
127.0.0.1:6379> zrem myzset1 two
(integer) 1
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"
4、zincrby:若zset中已經存在元素member、則該元素的score增加incrment否則向該集合中添加該元素,其score的值為increment
例:改變myset1中one元素的順序值
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"
127.0.0.1:6379> zincrby myzset1 2 one
"3"
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
5、zrank:返回zset中元素member的排名(score從小到大排序)即下標
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zrank myzset1 four
(integer) 1
6、zrevrank:返回zset集合中member元素的排名(按照score倒敘)即下標
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zrevrank myzset1 four
(integer) 1
127.0.0.1:6379> zrevrank myzset1 five
(integer) 0
7、zrevrange:從zset集合中倒敘(score倒敘)獲取元素
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zrevrange myzset1 0 -1 withscores
1) "five"
2) "5"
3) "four"
4) "4"
5) "one"
6) "3"
8、zrangebyscore:從zset集合中根據score順序獲取元素
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zrangebyscore  myzset1 4 5 withscores
1) "four"
2) "4"
3) "five"
4) "5"
9、zcount:返回集合中score在給定區間的數量
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zcount myzset1 3 4
(integer) 2
10:zcard:返回zset集合中所有元素個數
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zcard myzset1
(integer) 3
11、zremrangebyrank:刪除集合中排名(下標)在給定區間的元素
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zremrangebyrank myzset1 1 2
(integer) 2
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
12、zremrangebyscore::刪除集合中順序(score值)在給定區間的元素
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zremrangebyscore myzset1 3 4
(integer) 2
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "five"
2) "5"

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • binlog2sql是大眾點評開源的一款用於解析binlog的工具,在測試環境試用了下,還不錯。 其具有以下功能 1. 提取SQL 2. 生成回滾SQL 關於該工具的使用方法可參考github操作文檔:https://github.com/danfengcao/binlog2sql 個人感覺該文檔已 ...
  • 轉載:http://www.cnblogs.com/djcsch2001/articles/1823459.html 索引,索引的建立、修改、刪除 索引索引是關係資料庫中用於存放每一條記錄的一種對象,主要目的是加快數據的讀取速度和完整性檢查。建立索引是一項技術性要求高的工作。一般在資料庫設計階段的與 ...
  • 將hdfs里name與data清空,和將tmp清空 然後在hadoop目錄下運行 hadoop namenode -format 啟動 sbin/start-all.sh ...
  • Redis目前對事物的支持相對簡單。Redis只能保證一個client發起的事務中的命令可以連續的執行,而中間不會插入其他的client命令。當一個client在一個鏈接中發出multi命令時,這個鏈接會進入一個事務上下文,該連接後續的命令不會立即執行,而是先放到一個隊列中,當執行exec命令時,r... ...
  • ........ http://blog.csdn.net/se7en_q/article/details/47258007 ...
  • Redis的複製功能是支持多個資料庫之間的數據同步。一類是主資料庫(master)一類是從資料庫(slave),主資料庫可以進行讀寫操作,當發生寫操作的時候自動將數據同步到從資料庫,而從資料庫一般是只讀的,並接收主資料庫同步過來的數據,一個主資料庫可以有多個從資料庫,而一個從資料庫只能有一個主資料庫... ...
  • Redis速度很快,所以在一臺比較好的服務起下,一個外部的用戶可以在1秒鐘進行150k次的密碼嘗試連接,所以我們需要設置非常強大的密碼來防止暴力破解。 ...
  • create database 資料庫名; 創建一個資料庫即可解決,具體原因還未知 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...