(一)Redis筆記——簡介 、key 、數據類型


1.  Redis是什么、特點、優勢

Redis是一個開源的使用C語言編寫、開源、支持網絡、可基於內存亦可持久化的日志型、高性能的Key-Value數據庫,並提供多種語言的API。

它通常被稱為數據結構服務器,因為值(value)可以是 字符串(String)、哈希(Map)、 列表(list)、集合(sets) 和 有序集合(sorted sets)等類型。

Redis 與其他 key - value 緩存產品有以下三個特點:

  • Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
  • Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
  • Redis支持數據的備份,即master-slave模式的數據備份。

Redis優勢

  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
  • 原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全並后的原子性執行。
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

 2. Redis 的啟動與退出

[root@centoszang 桌面]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@centoszang 桌面]# redis-server /etc/redis.conf
[root@centoszang 桌面]# redis-cli
127.0.0.1:6379> 
[root@centoszang 桌面]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set var helloWorld
OK
127.0.0.1:6379> get var
"helloWorld"
127.0.0.1:6379> del var
(integer) 1
127.0.0.1:6379> get var
(nil)
127.0.0.1:6379> quit
[root@centoszang 桌面]# 

redis命令不區分大小寫,所以get var和GET var是等價的

 3. Redis key

 Redis是key-value的數據庫,Redis的鍵用於管理Redis的鍵。主要命令如下:

序號 Redis keys命令及描述
1 DEL key
該命令用於在 key 存在是刪除 key。
2 DUMP key 
序列化給定 key ,並返回被序列化的值。
3 EXISTS key 
檢查給定 key 是否存在。
4 EXPIRE key seconds
為給定 key 設置過期時間。
5 EXPIREAT key timestamp 
EXPIREAT 的作用和 EXPIRE 類似,都用於為 key 設置過期時間。 不同在於 EXPIREAT 命令接受的時間參數是 UNIX 時間戳(unix timestamp)。
6 PEXPIRE key milliseconds 
設置 key 的過期時間億以毫秒計。
7 PEXPIREAT key milliseconds-timestamp 
設置 key 過期時間的時間戳(unix timestamp) 以毫秒計
8 KEYS pattern 
查找所有符合給定模式( pattern)的 key 。例如keys * 返回所有的key
9 MOVE key db 
將當前數據庫的 key 移動到給定的數據庫 db 當中。
10 PERSIST key 
移除 key 的過期時間,key 將持久保持。
11 PTTL key 
以毫秒為單位返回 key 的剩余的過期時間。
12 TTL key 
以秒為單位,返回給定 key 的剩余生存時間(TTL, time to live)。
13 RANDOMKEY 
從當前數據庫中隨機返回一個 key 。
14 RENAME key newkey 
修改 key 的名稱
15 RENAMENX key newkey 
僅當 newkey 不存在時,將 key 改名為 newkey 。
16 TYPE key 
返回 key 所儲存的值的類型。

 4. Redis數據類型

Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

  • string是最簡單的類型,你可以理解成與Memcached一模一個的類型,一個key對應一個value,其上支持的操作與Memcached的操作類似。但它的功能更豐富。
  • Hash數據類型允許用戶用Redis存儲對象類型,Hash數據類型的一個重要優點是,當你存儲的數據對象只有很少幾個key值時,數據存儲的內存消耗會很小.
  • list是一個鏈表結構,主要功能是push、pop、獲取一個范圍的所有值等等。操作中key理解為鏈表的名字。
  • set是集合,和我們數學中的集合概念相似,對集合的操作有添加刪除元素,有對多個集合求交並差等操作。操作中key理解為集合的名字。
  • zset是set的一個升級版本,他在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定后,zset會自動重新按新的值調整順序。可以理解了有兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。

 4.1 String(字符串)

  • 是Redis最基本的數據類型,可以理解成與Memcached一模一樣的類型,一個key對應一個value
  • 二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象 
  • 一個鍵最大能存儲512MB

利用set給變量var賦值“String type”;利用get獲得變量var的值

127.0.0.1:6379> set var1 "xiaofeng"
OK
127.0.0.1:6379> get var1
"xiaofeng"

  4.2 Hash(哈希)

  • 是一個鍵值對集合
  • 是一個string類型的field和value的映射表,hash特別適合用於存儲對象

hset,hget例子

127.0.0.1:6379> hset hash1 name "xiaoming"
(integer) 1
127.0.0.1:6379> hset hash1 rank "first"
(integer) 1
127.0.0.1:6379> hset hash2 name "dahuang"
(integer) 1
127.0.0.1:6379> hset hash2 rank "second"
(integer) 1
127.0.0.1:6379> hget hash1 rank
"first"

hset&hget一次只能往哈希結構里面插入一個鍵值對,如果插入多個可以用hmset&hmget

hmset, hmget例子

127.0.0.1:6379> hmset hash3 name "fengge" rank "third"
OK
127.0.0.1:6379> hmget hash3
(error) ERR wrong number of arguments for 'hmget' command
127.0.0.1:6379> hmget hash3 name
1) "fengge"
127.0.0.1:6379> hgetall hash3
1) "name"
2) "fengge"
3) "rank"
4) "third"

  4.3 List(列表)

lpush往列表的前邊插入;lrange后面的數字是范圍(閉區間)

列表最多可存儲 232 - 1 元素 (4294967295, 每個列表可存儲40多億)。

127.0.0.1:6379> lpush list1 one
(integer) 1
127.0.0.1:6379> lpush list1 two
(integer) 2
127.0.0.1:6379> lpush list1 three
(integer) 3
127.0.0.1:6379> lrange list1
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange list1 0 10
1) "three"
2) "two"
3) "one"
redis 127.0.0.1:6379> LRANGE KEY_NAME START END

Redis Lrange 返回列表中指定區間內的元素,區間以偏移量 START 和 END 指定。 其中 0 表示列表的第一個元素, 1 表示列表的第二個元素,以此類推。 你也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素,以此類推。

  4.4 Set(集合)

Redis的Set是string類型的無序集合。

集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)

set往集合中插入元素,smembers列舉出集合中的元素

成功插入返回1;錯誤插入返回0,例子中 two 第二次插入時,因已經存在,故插入失敗。

127.0.0.1:6379> sadd set1 one
(integer) 1
127.0.0.1:6379> sadd set1 two
(integer) 1
127.0.0.1:6379> sadd set1 two
(integer) 0
127.0.0.1:6379> sadd set1 three
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "two"
2) "three"
3) "one"

  4.5 zset(sorted sete:有序集合)

zset和set一樣也是String類型的集合,且不允許元素重復 , 用於將一個或多個成員元素及其分數值加入到有序集當中。

如果某個成員已經是有序集的成員,那么更新這個成員的分數值,並通過重新插入這個成員元素,來保證該成員在正確的位置上。

zset和set不同的地方在於zset關聯一個double類型的分數,redis通過分數對集合中的元素排序

zset的元素是唯一的,但是分數是可以重復的

127.0.0.1:6379> zadd zset1 1 one
(integer) 1
127.0.0.1:6379> zadd zset1 2 two
(integer) 1
127.0.0.1:6379> zadd zset1 3 three
(integer) 1
127.0.0.1:6379> zadd zset1 3 three
(integer) 0
127.0.0.1:6379> zadd zset1 4 three
(integer) 0
127.0.0.1:6379> ZRANGE zset1 0 10 
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zadd zset1 3 ttt
(integer) 1
127.0.0.1:6379> ZRANGE zset1 0 10
1) "one"
2) "two"
3) "ttt"
4) "three"

成功插入返回1,否則返回0。插入已存在元素失敗--返回0

5. Redis HyperLogLog

Redis HyperLogLog是用來做基數統計的算法。優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、並且是很小的。

在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基 數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。

:因為HyperLogLog只會根據輸入元素來計算基數,而不會存儲輸入元素本身,因此不會返回輸入的各個元素。

基數是什么?比如數據集 {1, 3, 5, 7, 5, 7, 8}, 那么這個數據集的基數集為 {1, 3, 5 ,7, 8}, 基數(不重復元素)為5。 基數估計就是在誤差可接受的范圍內,快速計算基數。

      

127.0.0.1:6379> pfadd zang money
(integer) 1
127.0.0.1:6379> pfadd zang health
(integer) 1
127.0.0.1:6379> pfadd zang handsome
(integer) 1
127.0.0.1:6379> pfadd zang clever
(integer) 1
127.0.0.1:6379> PFCOUNT zang
(integer) 4
127.0.0.1:6379> pfadd key1 a b c d
(integer) 1
127.0.0.1:6379> pfadd key2 a e f d
(integer) 1
127.0.0.1:6379> PFMERGE key3 key1 key2
OK
127.0.0.1:6379> PFCOUNT key3
(integer) 6

 

 


免責聲明!

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



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