Redis入門到精通-Redis數據類型

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

登錄Redis數據庫

[root@localhost bin]# /usr/local/redis/bin/redis-cli

String類型

? String 數據結構是簡單的key-value類型,value其實不僅是String,也可以是數字,是包含很多種類型的特殊類型,并且是二進制安全的。比如序列化的對象進行存儲,比如一張圖片進行二進制存儲,比如一個簡單的字符串,數值等等。

常用命令

? 設值:set name zhangsan (說明:多次設置name會覆蓋)

? setnx name lisi: (not exist) 如果name不存在,則設值。如果name存在,則不設值并返回0;

? setex name 10 lisi :(expired) 設置name的值為lisi,過期時間為10秒,10秒后name清除(key也清除)

? setrange string range value 替換字符串

? 例如:>set address abcdefg

? >setrange address 2 yy 后address的值為abyyefg (從第3個字符開始替換為yy,后面的由原來

? 的字符補齊)。

? 取值: get name

? 刪值:del name

批量寫:mset k1 v1 k2 v2 ...

? 批量讀:mget k1 k2 k3

? 一次性設值和讀取(返回舊值,寫上新值):getset name lily

? 數值類型自增減:incrdecrincrbydecrby

127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> incr a
(integer) 2
127.0.0.1:6379> incr a
(integer) 3
127.0.0.1:6379> get a
"3"
127.0.0.1:6379> desc a
(error) ERR unknown command 'desc'
127.0.0.1:6379> decr a
(integer) 2
127.0.0.1:6379> get a
"2"
127.0.0.1:6379> incrby a 4
(integer) 6
127.0.0.1:6379> incrby a 2
(integer) 8
127.0.0.1:6379> decrby a 4
(integer) 4

? 字符串拼接:append name abc :在name=lisi原有基礎上拼接為 lisiabc

? 字符串長度:strlen name :返回name的字符長度

Hash類型

? Hash類型是String類型的field和value的映射表,或者說是一個String集合。它特別適合存儲對象,相比較而言,將一個對象類型存儲在Hash類型要存儲在String類型里占用更少的內存空間,并方整個對象的存取。

常用命令

? 設值:hset hashname field value(hset是設值命令,hashname是集合名字,field是字段名,value是值)

? 例子:>hset user1 name zhangsan

? >hset user1 age 23

? 取值:hget hashname field

? 批量設置:hmset hashname field1 value1 field2 value2 ….

? 例子:>hmset user2 name lisi age 22

? 批量取值:hmget hashname field1 field2 ...

? hsetnx:和setnx大同小異

? 集合遞增和遞減:hincrby和hdecrby

127.0.0.1:6379> hgetall user1
1) "age"
2) "23"
3) "name"
4) "zhangsan"
127.0.0.1:6379> hincrby user1 age 2
(integer) 25
127.0.0.1:6379> hgetall user1
1) "age"
2) "25"
3) "name"
4) "zhangsan"

? hexists:是否存在key,如果存在返回,不存在返回0

127.0.0.1:6379> hexists user1 age
(integer) 1
127.0.0.1:6379> hexists user1 sex
(integer) 0

? 刪除:hdel 刪除指定的hash的field

127.0.0.1:6379> hdel user1 name
(integer) 1
127.0.0.1:6379> hgetall user1
1) "age"
2) "23"

? hlen:返回hash集合里的所有的鍵數值(size)

127.0.0.1:6379> hlen user1
(integer) 2

? hkeys 返回hash里所有的字段

127.0.0.1:6379> hkeys user1
1) "name"
2) "age"

? hvals返回hash的所有value

127.0.0.1:6379> hvals user1
1) "zhangsan"
2) "23"

? hgetall返回hash里所有的key和value

127.0.0.1:6379> hgetall user1
1) "name"
2) "zhangsan"
3) "age"
4) "23"

List類型

? List類型是一個鏈表結構的集合,其主要功能有push、pop、獲取元素等。更詳細的說,List類型是一個雙端鏈表的節后,我們可以通過相關的操作進行集合的頭部或者尾部添加和刪除元素,List的設計非常簡單精巧,即可以作為棧,又可以作為隊列,滿足絕大多數的需求。

常用命令

? lpush:從頭部加入元素(棧,先進后出)

127.0.0.1:6379> lpush list1 hello
(integer) 1
127.0.0.1:6379> lpush list1 world
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "hello"

? rpush:從尾部加入元素(隊列,先進先出)

127.0.0.1:6379> rpush list1 java
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "hello"
3) "java"

? linsert:插入元素

127.0.0.1:6379> linsert list1 before hello php
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "php"
3) "hello"
4) "java"
127.0.0.1:6379> linsert list1 after hello php
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "php"
3) "hello"
4) "php"
5) "java"

? lset:將制定下表的元素替換掉

127.0.0.1:6379> lset list1 0 k
OK
127.0.0.1:6379> lrange list1 0 -1
1) "k"
2) "php"
3) "hello"
4) "php"
5) "java"

? lrem:刪除元素,移除n個,返回刪除的個數n

127.0.0.1:6379> lrem list1 1  php
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "k"
2) "hello"
3) "php"
4) "java"
127.0.0.1:6379> lrem list1 1  php
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "k"
2) "hello"
3) "java"

? ltrim:保留制定key的值范圍內的數據

127.0.0.1:6379> rpush list2 1
(integer) 1
127.0.0.1:6379> rpush list2 2
(integer) 2
127.0.0.1:6379> rpush list2 3
(integer) 3
127.0.0.1:6379> rpush list2 4
(integer) 4
127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> ltrim list2 2 -1
OK
127.0.0.1:6379> lrange list2 0 -1
1) "3"
2) "4"

? lpop:從list的頭部刪除元素,并返回刪除元素。

127.0.0.1:6379> rpush list3 a
(integer) 1
127.0.0.1:6379> rpush list3 b
(integer) 2
127.0.0.1:6379> rpush list3 c
(integer) 3
127.0.0.1:6379> rpush list3 d
(integer) 4
127.0.0.1:6379> lrange list3 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> lpop list3
"a"
127.0.0.1:6379> lrange list3 0 -1
1) "b"
2) "c"
3) "d"

? rpop:從list的尾部刪除元素,并返回刪除元素

127.0.0.1:6379> rpop list3
"d"
127.0.0.1:6379> lrange list3 0 -1
1) "b"
2) "c"

? 可以基于List實現MQ。

? rpoplpush list1 list2:從list1尾部刪除元素,并將被移除的元素添加到list的頭部,返回被移除的元素。

127.0.0.1:6379> lrange list2  0 -1
1) "3"
2) "4"
127.0.0.1:6379> rpoplpush list2 list4
"4"
127.0.0.1:6379> lrange list2  0 -1
1) "3"
127.0.0.1:6379> lrange list4  0 -1
1) "4"
127.0.0.1:6379> rpoplpush list2 list4
"3"
127.0.0.1:6379> lrange list2  0 -1
(empty list or set)
127.0.0.1:6379> lrange list4  0 -1
1) "3"
2) "4"

? llen:返回元素個數

127.0.0.1:6379> llen list1
(integer) 3
127.0.0.1:6379> llen list3
(integer) 2

? lindex:返回名稱為key的list中index位置的元素

127.0.0.1:6379> lrange list3 0 -1
1) "b"
2) "c"
127.0.0.1:6379> lindex list3 0
"b"
127.0.0.1:6379> lindex list3 1
"c"
127.0.0.1:6379> lindex list3 2
(nil)

Set類型

? set集合是string類型的無序集合,set是通過hashtable實現的,對集合我們可以取交集、并集、差集。

常用命令

? sadd:向名稱為key的set中添加元素,set集合不允許重復元素。

? smembers:查看set集合中的元素。

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 a
(integer) 0
127.0.0.1:6379> smembers set1
1) "a"
2) "b"

? srem:刪除set集合的元素

127.0.0.1:6379> srem set1 a
(integer) 1
127.0.0.1:6379> smembers set1
1) "b"

? spop:隨機返回刪除的key

127.0.0.1:6379> sadd set1 a
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sadd set1 d
(integer) 1
127.0.0.1:6379> smembers set1
1) "a"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> spop set1
"d"
127.0.0.1:6379>

? sdiff:返回兩個集合的不同元素(哪個集合在前面就以哪個集合為標準)

127.0.0.1:6379> sadd set2 a
(integer) 1
127.0.0.1:6379> sadd set2 b
(integer) 1
127.0.0.1:6379> sadd set2 c
(integer) 1
127.0.0.1:6379> sadd set3 a
(integer) 1
127.0.0.1:6379> sadd set3 d
(integer) 1
127.0.0.1:6379> sdiff set2 set3
1) "b"
2) "c"
127.0.0.1:6379> sdiff set3 set2
1) "d"
127.0.0.1:6379>

? sdiffstore:將返回的不同元素,存儲到另一個集合里

? sdiffstore set4 set2 set3 將set2 set3的比較結果保存到set4中

127.0.0.1:6379> sdiff set2 set3
1) "c"
2) "b"
127.0.0.1:6379> sdiffstore set4 set2 set3
(integer) 2
127.0.0.1:6379> smembers set4
1) "c"
2) "b"
127.0.0.1:6379>

? sinter:取交集

? sinterstore:取交集后保存

? sunion:取并集

? sunionstore:取并集后保存

127.0.0.1:6379> smembers set1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> smembers set3
1) "a"
2) "d"
127.0.0.1:6379> sinter set1 set3
1) "a"
127.0.0.1:6379> sunion set1 set3
1) "a"
2) "c"
3) "b"
4) "d"
127.0.0.1:6379> sinterstore set5 set1 set3
(integer) 1
127.0.0.1:6379> sunionstore set6 set1 set3
(integer) 4
127.0.0.1:6379> smembers set5
1) "a"
127.0.0.1:6379> smembers set6
1) "a"
2) "c"
3) "b"
4) "d"

? smove:從一個set集合移動到另一個set集合里

? scard:查看集合里的元素個數

? sismember:判斷某個元素是否為集合中的元素,是,返回1。不是,返回0。

? srandmember:隨機返回一個元素

127.0.0.1:6379> smembers set2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> smembers set3
1) "a"
2) "d"
127.0.0.1:6379> smove set2 set3 c
(integer) 1
127.0.0.1:6379> smembers set2
1) "a"
2) "b"
127.0.0.1:6379> smembers set3
1) "a"
2) "c"
3) "d"
127.0.0.1:6379> scard set2
(integer) 2
127.0.0.1:6379> scard set3
(integer) 3
127.0.0.1:6379> sismember set2 a
(integer) 1
127.0.0.1:6379> sismember set2 c
(integer) 0
127.0.0.1:6379> srandmember set2
"b"
127.0.0.1:6379> srandmember set2
"a"
127.0.0.1:6379> srandmember set2
"a"

Zset類型

? 有序集合和集合一樣也是string類型元素的集合,且不允許重復的成員。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。

有序集合的成員是唯一的,但分數(score)卻可以重復。

集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

常用命令

? zadd:向有序集合中添加一個元素,該元素如果存在,則更新順序,如果分值相同元素不同,會同事存在兩個元素。

? zadd key score1 member1 score2 member2...

127.0.0.1:6379> zadd zset1 1 a 2 b 4 d 3 c
(integer) 4
127.0.0.1:6379> zrange zset1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
127.0.0.1:6379> zadd zset1 1.5 x   //插入1.5分的 會根據分數排序
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "b"6) "2"7) "c"8) "3"9) "d"
10) "4"
127.0.0.1:6379> zadd zset1 2 y   //插入分值為2,但元素為新元素y
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 withscores   1) "a"2) "1"3) "x"4) "1.5"5) "b"                          //兩個分值為2的b和y都會存在6) "2" 7) "y"                        8) "2"9) "c"
10) "3"
11) "d"
12) "4"
127.0.0.1:6379> zadd zset1 5 b  //重新插入重復元素b,分值發生了變化,移除之前的元素,重新按照新的分值排序
(integer) 0
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "y"6) "2"7) "c"8) "3"9) "d"
10) "4"
11) "b"
12) "5"

? zrem :刪除zset名稱key中的member元素

? zrem zset member

127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "y"6) "2"7) "c"8) "3"9) "d"
10) "4"
11) "b"
12) "5"
127.0.0.1:6379> zrem zset1 a
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b"
10) "5"

? zrank 返回有序集合中指定成員的索引(從小到大排序)

? zrevrank 返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序

127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b"
10) "5"
127.0.0.1:6379> zrank zset1 d  
(integer) 3  //第4個位置
127.0.0.1:6379> zrevrank zset1 d  
(integer) 1  //第2個位置

? zcard 返回集合里所有元素的個數

? zcount 返回集合中score在給定區間中的數量

127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b"
10) "5"
127.0.0.1:6379> zcard zset1
(integer) 5
127.0.0.1:6379> zcount zset1 1 3
(integer) 3

? zincrby key increment member: 有序集合中對指定成員的分數加上增量 increment

? zrangebyscore key min max [WITHSCORES] [LIMIT] :通過分數返回有序集合指定區間內的成員

? zremrangebyrank key start stop :移除有序集合中給定的排名區間的所有成員

? zremrangebyscore key min max:移除有序集合中給定的分數區間的所有成員

轉載于:https://my.oschina.net/u/3712726/blog/1554489

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454758.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454758.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

裝機之 BIOS、EFI與UEFI詳解

在我們的電腦中,都有一塊黑色的小芯片。但是請千萬不要小看它,如果它損壞或者數據錯誤亂套的話,恭喜,如果不會“救回”這個小芯片,那么這臺電腦可以掛閑魚賣零件了…… 這個小芯片是什么呢?對,…

c/c++筆試題

微軟亞洲技術中心的面試題!!! 1.進程和線程的差別。 線程是指進程內的一個執行單元,也是進程內的可調度實體. 與進程的區別: (1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位 (2)并發性&…

php 模板 php + mysql + myodbc,連接MySQL數據庫在ASP中,就用MyODBC

我們大家都知道ASP與MySQL連接現在應用最為廣泛的兩種辦法是,一是使用組件,經常使用的是MySQL(和PHP搭配之最佳組合)X,可惜價格很貴。另一個就是用MyODBC來連接MySQL數據庫,下面我們就來看看第二種方式。 試驗的平臺: …

Android Gradle和Gradle插件區別

2019獨角獸企業重金招聘Python工程師標準>>> 一、引言 1、什么是Gradle?什么是Gradle插件? build.gradle中依賴的classpath com.android.tools.build:gradle:2.1.2和gradle-wrapper.properties中的distributionUrlhttps\://services.gradle.org/distributions/gra…

裝機之MBR和GPT

MBR分區 MBR的意思是“主引導記錄”,是IBM公司早年間提出的。它是存在于磁盤驅動器開始部分的一個特殊的啟動扇區。這個扇區包含了已安裝的操作系統系統信息,并用一小段代碼來啟動系統。如果你安裝了Windows,其啟動信息就放在這一段代碼中—…

Linux 文件打亂順序

cat in.txt | awk BEGIN{srand()}{print rand()"\t"$0} | sort -k1,1 -n | cut -f2- > out.txt sort -R in.txt > out.txt 后者要計算每行的hash,再排序,在文件內容比較多的情況下前者要比后者快得多 參考文獻: http://blog.…

php 計算 目錄大小,php計算整個目錄大小的方法

本文實例講述了php計算整個目錄大小的方法。分享給大家供大家參考。具體實現方法如下:/*** Calculate the full size of a directory** author Jonas John* version 0.2* link http://www.jonasjohn.de/snippets/php/dir-size.htm* param string $DirectoryPath Dir…

實驗報告3

中國人民公安大學 Chinese people’ public security university 網絡對抗技術 實驗報告 實驗三 密碼破解技術 學生姓名 陸圣宇 年級 2014 區隊 三 指導教師 高見 信息技術與網絡安全學院 2016年11月7日 實驗任務總綱 2016—2017 學年 第 一 學期 一、實驗目的 1&am…

裝機之windows10和ubuntu雙系統

制作系統U盤 下載Ubuntu16.04 我們首先去Ubuntu的官網下載一個Ubuntu16.04的iso鏡像文件。當然里面也有優麒麟,其實就是把Ubuntu16.04漢化了一下,個人推薦安裝Ubuntu16.04 體驗上可能好一些。 利用軟碟通制作 不會的可以查看此教程https://blog.csdn…

函數之內置函數1

什么是內置函數:別人已經定義好了的函數,我們只管拿來調用就好 locals:局部作用域中的變量 globals:全局作用域中的變量 這兩者在全局執行,結果一樣;在局部中locals表示函數內的名字,返回的是一…

matlab var std,Matlab var std cov 函數解析

在Matlab中使用var求樣本方差,使用std求標準差!首先來了解一下方差公式:p [-0.92 0.73 -0.47 0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93]p -0.9200 0.7300 -0.4700 0.7400 0.2900-0.0800 0.8600 -0.6700 -0.5200 0.9300…

Java中什么是匿名對象,空參構造方法輸出創建了幾個匿名對象,屬性聲明成static...

package com.swift; //使用無參構造方法自動生成對象,序號不斷自增 public class Person {private static int count; //如果在定義類時,使用的是靜態的屬性,則得到的結果是不同的。count生命周期長,與類相同public int id;public…

裝機之制作系統U盤

工具:UltraISO(軟碟通),iso鏡像 在制作系統U盤的時候我們需要去下一個軟件——UltraISO(軟碟通),這個自己去百度搜索一下應該就能出來的。下載安裝完以后,我們打開軟碟通的界面打開…

訪問index.php跳轉,打開index.php后,跳轉到/user/login.html

jeff2009-11-03 20:54:47注釋后,產生這些錯誤:Notice: Undefined property: myRouter::$user in /data/zentaophp/app/pms/module/common/control.php on line 91Notice: Trying to get property of non-object in /data/zentaophp/app/pms/module/commo…

關于清空object對象里的屬性的兩種方法

最近碰到一個問題,就是要清空對象里的屬性,我想了兩個方法,做個結果的記錄,都是自己的想法,有不對的地方請指教 var obj{};  //對象里的屬性自己看著寫吧 第一種方法: objnull; 這種方法看上去很快速&…

Linux 狀態命令之系統調用和信號傳遞 strace

簡介 strace 命令是一個集診斷、調試、統計與一體的工具,我們可以使用 strace 分析應用中涉及的系統調用和信號傳遞的跟蹤結果,以達到解決問題或者是了解應用工作過程的目的。 strace 與專業的調試工具比如說 gdb 之類的是沒法相比的,因為它…

李飛飛:為什么計算機視覺對機器人如此重要?

根據Guide2Research的排名,IROS是計算機視覺領域排名第四的學術會議,前三名分別為CVPR、ICCV、ECCV。計算機視覺在機器人的發展史中起著非常重要的作用,與之相關的“感知”也正是歷年IROS大會上的重要內容,隨著機器人研究的發展和…

php 循環 顯示 圖片,thinkphp 循環顯示圖片問題!!!~~~~

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓class CatController extends Controller {public function cat(){$goodsModel D(Admin/goods);$goodslist $goodsModel->field(goods_id,goods_name,shop_price,goods_img,market_price)->where(cat_id)->select();$th…

python flask 基礎入門

1. Flask 中的Hello World! 在使用pycharm創建一個Flask項目后,將會默認創建一個flask的app,這里來講下每行代碼表示的意義,代碼入下 from flask import Flask    # 導入flask模塊 如果沒有這個模塊需要使用pip install flask 進行安裝…

[C/C++]各種面試題

各種面試題 *程序的內存分配 一個由c/C編譯的程序占用的內存分為以下幾個部分 1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。 2、堆區(heap&#xf…