三、Redis-數據類型詳解(string,list,set,sort set,hash)

Redis數據類型-stringlinux

string爲最簡單的類型,與Memcached同樣的類型,一個key對應一個value,其支持的操做與Memcached的操做相似,它的功能更豐富。設置能夠存二進制的對象。bash

  • 建立格式:set key valueide

127.0.0.1:6379> set mykey "test"
OK
  • 獲取:get keyspa

127.0.0.1:6379> get mykey
"test"
  • 建立多個鍵值對:mset key1 value key2 value線程

127.0.0.1:6379> mset key1 1 key2 2 key3 3
OK
  • 獲取多個鍵值對:mget key1 key2 key3對象

127.0.0.1:6379> mget key1 key2 key3
1) "1"
2) "2"
3) "3"

ps:支持Tab補全命令排序

Redis數據類型-list索引

list是一個鏈表結構,主要功能是push、pop、獲取一個範圍的全部值等等。操做中key理解爲鏈表的名字。push、pop是一對反義詞,壓進去擠出來隊列

使用 list 結構,咱們能夠輕鬆地實現最新消息排行等功能(好比新浪微博的 TimeLine )。list 的另外一個應用就是消息隊列,能夠利用 list 的 push操做,將任務存在 list 中,而後工做線程再用pop操做將任務取出進行執行。rem

  • 存入key值方法

格式:LPUSH key value

127.0.0.1:6379> LPUSH list1 "aminglinux"
(integer) 1
127.0.0.1:6379> LPUSH list1 "aminglinux"
(integer) 2
127.0.0.1:6379> LPUSH list1  "1 2 3"
(integer) 3
127.0.0.1:6379> LPUSH list1 "aaa bbb"
(integer) 4
  • 查看key值

格式:LRANGE key名 開始 結束(-1是末尾)

127.0.0.1:6379> LRANGE list1 0 -1
1) "aaa bbb"
2) "1 2 3"
3) "aminglinux"
4) "aminglinux"
  • 取出key值

格式:LPOP key名

127.0.0.1:6379> LPOP list1
"aaa bbb"

取完你在看就沒有這個值了,LRANGE list1 0 -1

127.0.0.1:6379> LRANGE list1 0 -1
1) "1 2 3"
2) "aminglinux"
3) "aminglinux"


Redis數據類型-set

set是集合,和咱們數學中的集合概念類似,對集合的操做有添加刪除元素,有對多個集合求交併差等操做。操做中key理解爲集合的名字。好比在微博應用中,能夠將一個用戶全部的關注人存在一個集合中,將其全部粉絲存在一個集合。由於 Redis 很是人性化的爲集合提供了求交集、並集、差集等操做,那麼就能夠很是方便的實現如共同關注、共同喜愛、二度好友等功能,對上面的全部集合操做,你還能夠使用不一樣的命令選擇將結果返回給客戶端仍是存集到一個新的集合中。

 set示例

建立命令SADD

格式:SADD 元素名 值

127.0.0.1:6379> SADD set1 a
(integer) 1
127.0.0.1:6379> SADD set1 b
(integer) 1
127.0.0.1:6379> SADD set1 c
(integer) 1

查看元素值

127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "a"
3) "b"
  • 交集、並集、差集

set一、set2的值:

127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> SMEMBERS set2
1) "a"
2) "b"
3) "2"

求交集:SINTER 元素1 元素2

127.0.0.1:6379> SINTER set1 set2
1) "a"
2) "b"

求並集:SUNION

127.0.0.1:6379> SUNION set1 set2
1) "a"
2) "c"
3) "b"
4) "2"

求差集:SDIFF

127.0.0.1:6379> SDIFF set1 set2 
1) "c"


  • 刪除元素值:SREM

例如刪除元素set1裏的c值

127.0.0.1:6379> SREM set1 c
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "a"
2) "b"


Redis數據類型-sort set

sorted set是有序集合,它比set多了一個權重參數score,使得集合中的元素可以按 score 進行有序排列,好比一個存儲全班同窗成績的 Sorted Sets,其集合 value 能夠是同窗的學號,而 score 就能夠是其考試得分,這樣在數據插入集合的時候,就已經進行了自然的排序。

格式:ZADD key名 score權重 value值

127.0.0.1:6379> ZADD set3 12 abc
127.0.0.1:6379> ZADD set3 2 "cde 123"
127.0.0.1:6379> ZADD set3 24 "123-aaa"
127.0.0.1:6379> ZADD set3 4 "a123a"

正序查看(從小到大)

127.0.0.1:6379> ZRANGE set3 0 -1
1) "cde 123"
2) "a123a"
3) "abc"
4) "123-aaa"

倒序 (從大到小)

127.0.0.1:6379> ZREVRANGE set3 0 -1
1) "123-aaa"
2) "abc"
3) "a123a"
4) "cde 123"


Redis數據類型-hash

在Memcached中,咱們常常將一些結構化的信息打包成hashmap,在客戶端序列化後存儲爲一個字符串的值(通常是 JSON 格式),好比用戶的暱稱、年齡、性別、積分等。 

示例

127.0.0.1:6379> hset hash1 name aming

127.0.0.1:6379> hget hash1 name

"aming"

127.0.0.1:6379> hset hash1  age 30

127.0.0.1:6379> hget hash1 age

"30"

查看全部

127.0.0.1:6379> hgetall hash1

1) "name"奇數行是key

2) "aming"偶數行是value

3) "age"

4) "30"


Redis經常使用操做詳解 (string, list)

string

set key1 aminglinux

get key1

命令:setnx

檢測key值是否存在,返回0表示存在而且不會覆蓋原來的key值,返回1表示不存在而且建立key值

用法:setnx key名 key值

舉例:

存在

127.0.0.1:6379> get key1
"a"
127.0.0.1:6379> setnx key1 a
(integer) 0

不存在

127.0.0.1:6379> setnx key3 a
(integer) 1
127.0.0.1:6379>

命令:setex

設置過時時間

格式:setex key名 過時時間 key值

set設置方法:set key名 key值 ex 過時時間

127.0.0.1:6379> get key3 ##先查看是有的
"a"
127.0.0.1:6379> set key3 bb ex 10 在覆蓋一個過時時間爲10秒的
OK
127.0.0.1:6379> get key3
"bb"
127.0.0.1:6379> get key3 ##10秒以後再看就沒了
(nil)

setex設置過時時間方法:

setex key3 10 1 //給key3設置過時時間爲10s,值爲1,若key已經存在,會覆蓋新的值

127.0.0.1:6379> get key3
"2"
127.0.0.1:6379> setex key3 10 1
OK
127.0.0.1:6379> get key3
"1"
127.0.0.1:6379> get key3
(nil)


list

連續建立多個key值

mset k1 1 k2 a k3 c

mget k1 k3 k2

命令:lpush(存,從最上面插入)

先存入的key值會在下邊 

127.0.0.1:6379> lpush list2 aaa
(integer) 1
127.0.0.1:6379> lpush list2 bbb
(integer) 2
127.0.0.1:6379> lpush list2 ccc
(integer) 3
127.0.0.1:6379> LRANGE list2 0 -1
1) "ccc"
2) "bbb"
3) "aaa"

命令:lpop(取,從上往下取)

它會先取最上邊的,也就是最後存入的

127.0.0.1:6379> LRANGE list2 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
127.0.0.1:6379> LPOP list2
"ccc"

命令:rpush(存,從最下邊存入)

127.0.0.1:6379> LRANGE list2 0 -1
1) "bbb"
2) "aaa"
127.0.0.1:6379> rpush list2 111
(integer) 3
127.0.0.1:6379> LRANGE list2 0 -1
1) "bbb"
2) "aaa"
3) "111"

命令:rpop(取,從下往上取)

127.0.0.1:6379> LRANGE list2 0 -1
1) "bbb"
2) "aaa"
3) "111"
127.0.0.1:6379> rpop list2
"111"

命令:linsert(插入)

LINSERT key BEFORE|AFTER pivot value

格式:linsert key值 前|後 原始值 要插入的值

linsert  list1  before aaa ccc  //在aaa的前面插入一個元素爲ccc

127.0.0.1:6379> LRANGE list2 0 -1
1) "bbb"
2) "aaa"
127.0.0.1:6379> LINSERT list2 BEFORE aaa ccc
(integer) 3
127.0.0.1:6379> LRANGE list2 0 -1
1) "bbb"
2) "ccc"
3) "aaa"

在aaa後邊插入ddd

127.0.0.1:6379> LINSERT list2  AFTER aaa ddd
(integer) 4
127.0.0.1:6379> LRANGE list2 0 -1
1) "bbb"
2) "ccc"
3) "aaa"
4) "ddd"

命令:lset(更改某個key值)

lset list2 2 AAA  //把第2個元素修改成AAA

127.0.0.1:6379> LRANGE list2 0 -1
1) "bbb"
2) "ccc"
3) "aaa"
4) "ddd"
127.0.0.1:6379> LSET list2 2 AAA
OK
127.0.0.1:6379> LRANGE list2 0 -1
1) "bbb"
2) "ccc"
3) "AAA"
4) "ddd"

命令:lindex(查看某一個元素)

lindex list2 1  //查看第1元素

127.0.0.1:6379> LINDEX list2 1
"ccc"

命令:llen(查看key裏全部的值)

llen lista  //查看鏈表中有幾個元素

127.0.0.1:6379> LLEN list2
(integer) 4


集合(set)

命令:sadd(插入)

sadd seta aaa  //向集合seta中放入元素

127.0.0.1:6379> sadd seta aaa
(integer) 1
127.0.0.1:6379> smembers seta
1) "aaa"

命令:smembers(查看)

smembers seta   //查看集合中的全部元素 

127.0.0.1:6379> smembers seta
1) "bbb"
2) "aaa"

命令:srem(刪除)

srem seta aaa //刪除元素 

127.0.0.1:6379> srem seta aaa
(integer) 1
127.0.0.1:6379> smembers seta
1) "bbb"
2) "ccc"

spop seta    //隨機取出一個元素,刪除

127.0.0.1:6379> spop seta
"bbb"
127.0.0.1:6379> smembers seta
1) "ccc"

sdiff  seta  setb   //求差集,以seta爲標準(哪一個寫在前邊就以哪一個爲標準)

sdiffstore setc seta setb   //求差集而且存儲到新的集合裏,存儲到了setc裏 

sinter seta setb    //求交集

sinterstore  setd seta setb  //將交集存儲setd 

sunion seta setb  //求並集

sunionstore sete seta setb   //求並集並存儲到sete

sismember seta aaa  //判斷一個元素是否屬於一個集合(有的話顯示0,沒有顯示1)

srandmember  seta  //隨機取出一個元素,但不刪除

srandmember  seta 2//隨機取出多個元素,但不刪除(集合後邊加數字就行)


有序集合(zadd)

命令:zadd 

格式:zadd 集合名 等級 元素值

zadd zseta 11 123 //建立有序集合,根據等級從小到大排序

zrange zseta 0 -1   //顯示全部元素,按順序顯示

zrange zseta 0 -1 withscores   //能夠帶上分值

zrem zseta 123  //刪除指定元素

zrank zseta  aaa  //返回元素的索引值,索引值從0開始,按score正向排序(索引值就是下標)

zrevrank zseta 222   //同上,不一樣的是,按score反序排序

zrevrange  zseta  0 -1  反序顯示全部元素,並帶分值

zcard zseta  //返回集合中全部元素的個數

zcount  zseta 1 10  //  返回分值範圍1-10的元素個數

zrangebyscore  zseta 1 10 // 返回分值範圍1-10的元素

zremrangebyrank zseta  0 2  //刪除索引範圍0-2的元素,按score正向排序

zremrangebyscore zseta  1 10 //刪除分值範圍1-10的元素


hash

格式:hset key field value

hset hash1 name xjw  //創建hash

127.0.0.1:6379> hset hash1 name xjw
(integer) 1
127.0.0.1:6379> hget hash1 name
"xjw"

hget hash1 name

127.0.0.1:6379> hget hash1 name
"xjw"

HGETALL hash1 //查看全部的鍵值

127.0.0.1:6379> HGETALL hash1
1) "name"
2) "xjw"

hmset hash2 1 a 2 b 3 c 4 d     //批量創建鍵值對

127.0.0.1:6379> hmset hash2 1 a 2 b 3 c 4 d
OK
127.0.0.1:6379> HGETALL hash2
1) "1"
2) "a"
3) "2"
4) "b"
5) "3"
6) "c"
7) "4"
8) "d"

hmget hash2 1 2 // 獲取某一個的值

127.0.0.1:6379> hmget hash2 1
1) "a"
127.0.0.1:6379> hmget hash2 1 2
1) "a"
2) "b"

hdel hash2 xingbie  //刪除指定filed

127.0.0.1:6379> hdel hash2 1
(integer) 1
127.0.0.1:6379> HGETALL hash2 ##在查看就沒有a鍵值了
1) "2"
2) "b"
3) "3"
4) "c"
5) "4"
6) "d"

hkeys hash1   //打印全部的key

127.0.0.1:6379> hkeys hash1
1) "name"
127.0.0.1:6379> hkeys hash2
1) "2"
2) "3"
3) "4"

hvals hash1  //打印全部的values

127.0.0.1:6379> hvals hash1
1) "xjw"
127.0.0.1:6379> hvals hash2
1) "b"
2) "c"
3) "d"

hlen hash1  //查看hash有幾個filed

127.0.0.1:6379> hlen hash1
(integer) 1
127.0.0.1:6379> hlen hash2
(integer) 3
相關文章
相關標籤/搜索