redis初識

redis初識

1.  Redis是什麼

  • 開源
  • 基於建值對對存儲服務系統
  • 多種數據結構
  • Redis是一個開源的使用ANSI C語言編寫、遵照BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。

官網:https://redis.io/redis

圖片在這裏插入圖片描述數據庫

  • 高性能 ,功能豐富

2. Redis的前世此生

圖片在這裏插入圖片描述編程

Redis的特性

  • 速度快

官方給出的 10w  OPS 數據存在內存中,讀取很是快 用c語言實現的(50000 line) Redis 線程模型:單線程緩存

圖片在這裏插入圖片描述服務器

  • 持久化

Redis全部的數據保存在內存中,對數據的更新將異步地保存在磁盤上 Redis 提供了 RDB,AOF持久化方式網絡

  • 多種數據結構

String Hash List Sets Sorted Sets數據結構


Redis 迭代中增長的數據結構app

BitMaps : 位圖 HyperLogLog :超小內存惟一計數 GEO :地理信息定位異步

  • 支持多種編程語言

圖片在這裏插入圖片描述編程語言

  • 功能豐富

發佈訂閱 Lua腳本 事物 pipeline

  • "簡單"

23000  lines  of  code 不依賴外部庫 (like  libevent) 單線程模型

  • 主從複製圖片

  • 高可用,分佈式

高可用 :Redis-Sentinel (v2.8 )支持高可用 分佈式 :Redis-Cluster  (v3.0 ) 支持分數是

Redis使用場景

  • 緩存系統
  • 計數器
  • 消息隊列系統
  • 排行榜
  • 社交網絡
  • 實時系統

Redis的安裝

圖片在這裏插入圖片描述

可執行文件說明
  • redis-server  ->    Redis 服務器
  • redis- cli    ->   Redis命令行客戶端
  • redis-benchmark     ->   Redis性能測試
  • redis-check-aof   ->  AOF修復工具
  • redis-check-dump   ->  RDB文件檢查工具
  • redis-sentinel     ->  Sentinel服務器(2.8之後)
Redis經常使用配置
  • daemonize   ->   是不是守護進程(no | yes)
  • port             ->     Redis對外端口
  • logfileile  ->   Redis 系統日誌
  • dir   ->      Redis工做目錄
  • RDB config
  • AOF config
  • slow Log  config
  • maxMemory等等

數據結構和內部編碼

圖片在這裏插入圖片描述

單線程爲何這麼快

  1. 純內存
  2. 非阻塞IO
  3. 避免線程切換和競爭消耗

Redis API的使用和理解

1.  通用命令

keys : 遍歷全部key

localhost:6379> keys * 1) "b" 2) "blog:90" 3) "blog:71" 4) "blog:80" 5) "myset" 6) "Back3"

dbsize : db長度

localhost:6379> dbsize(integer) 21

exisits  key :判斷key是否存在

localhost:6379> exists a(integer) 1

del key  :刪除key

localhost:6379> del a(integer) 1

expire key seconds  :給key設置過時時間(秒)

localhost:6379> expire a 20(integer) 1

ttl  key  :查看key 還有多長時間過時 (注:-1 永不過時,-2不存在) persist key :去掉key的 過時時間

localhost:6379> ttl a(integer) -2localhost:6379> set a bOKlocalhost:6379> expire a 50(integer) 1localhost:6379> persist a(integer) 1

type key :查看key 類型

localhost:6379> type astring

#### 2. 字符串類型

set   、 get  、  del  操做

localhost:6379> set a bOKlocalhost:6379> get a"b"localhost:6379> del a(integer) 1

incr  key  自增1,若是key不存在,自增後 get(key) = 1

decr key  自減1,若是key不存在,自減後get(key) = -1

incrby key k ,若是key不存在,自增後get(key) = k

localhost:6379> incr a(integer) 4localhost:6379> incr a(integer) 5localhost:6379> incr a(integer) 6localhost:6379> decr a(integer) 5localhost:6379> decr a(integer) 4localhost:6379> incrby a 20(integer) 24

set key  value :進行覆蓋操做,無論key是否存在

setnx   key  :不存在,才設置

setxx :key 存在,才設置

localhost:6379> set a 1234OKlocalhost:6379> SETNX a 20(integer) 0localhost:6379> setnx b 20(integer) 0localhost:6379> setnx yxl 20(integer) 1localhost:6379> set a b xxOK

mget  key1 key2 key3 : 批量獲取key,原子操做

mset  key1 value1 key2 value2 : 批量設置key - value

localhost:6379> mget a b1) "b"2) "456"localhost:6379> mset a 200 b 500OK

getset key  newvalue : set key newvalue 並返回舊的value

append key value : 將value 追加到舊到value

strlen key :返回字符串到長度

localhost:6379> getset a a"200"localhost:6379> APPEND a bcd(integer) 4localhost:6379> get a"abcd"localhost:6379> strlen a(integer) 4

incrbyfloat key 3.5 : 增長key 對應的值3.5

getrange key start end :  獲取字符串指定下標的全部值

setrange key index value :設置指定下標新的值

localhost:6379> incrbyfloat max 3.5"3.5"localhost:6379> getrange max 0 1"3."localhost:6379> setrange max 1 23(integer) 3localhost:6379> get max"323"
  • 哈希類型

hget key field : 獲取hash key 對應的field 的value

hset key field value : 設置hash key  對應的field 的 value

hdel key  fiela

localhost:6379> hget user:1:info age "23"localhost:6379> hset user:1:info age 23 sex 男(integer) 0localhost:6379> hset user: age 23 sex 男(integer) 2localhost:6379> hget user: age"23"localhost:6379> hset user: name 1234(integer) 1localhost:6379> hgetall user:1) "age"2) "23"3) "sex"4) "\xe7\x94\xb7"5) "name"6) "1234"localhost:6379> hdel user: age(integer) 1

hexists : 判斷hash  key 是否有 field

hlen : 獲取 hash key field 的數量

localhost:6379> HGETALL user:1) "sex"2) "\xe7\x94\xb7"3) "name"4) "1234"localhost:6379> hexists user: name(integer) 1localhost:6379> hlen user:(integer) 2

hmget :hmget key field1 field 2   ......

hmset :    hmset key field1 value1 field2 value2 .....

localhost:6379> hmset user2 age 30 name kakaOKlocalhost:6379> hlen user2(integer) 2localhost:6379> hmget user2 age name1) "30"2) "kaka"

hgetall :返回hash key 對應全部的field 和 value

hvals  :返回hash  key 對應全部 field 的value

hkeys :返回hash key 對應全部field

localhost:6379> HGETALL user21) "age"2) "30"3) "name"4) "kaka"localhost:6379> HVALS user21) "30"2) "kaka"localhost:6379> hkeys user21) "age"2) "name"
圖片在這裏插入圖片描述
  • 列表類型

rpush : 從列表右端插入值(1-N個)

lpush : 從列表左端插入值(1-N個)

127.0.0.1:6379> rpush list1 1 2 3(integer) 6127.0.0.1:6379> lpush list2 1 2 3(integer) 3

linsert : 在list 指定的值前|後插入 newValue

127.0.0.1:6379> linsert list2 before 2 1234(integer) 4127.0.0.1:6379> linsert list2 after 2 1234(integer) 5

lpop : 從列表左側彈出一個item

rpop : 從列表右側彈出一個item

127.0.0.1:6379> lpop list2"3"127.0.0.1:6379> rpop list2"1"

lrem :  根據count值,從列表中刪除全部value相等的項

127.0.0.1:6379> lrem list1 0 1(integer) 2

ltrim : 按照索引範圍修剪列表

lrange :獲取列表指定索引範圍全部item

OK127.0.0.1:6379> lrange list2 0 -11) "1234"2) "2"3) "1234"

lindex : 獲取指定列表的item

llen :  獲取列表長度

lset : 設置列表指定索引值爲newValue

127.0.0.1:6379> LINDEX list1 0"3"127.0.0.1:6379> llen list1(integer) 2127.0.0.1:6379> lset list1 0 1234OK127.0.0.1:6379> lrange list1 0 -11) "1234"2) "3"
  • 集合類型

sadd : 向集合key添加element(若是存在就添加失敗)

scard : 計算集合大小

sismember : 判斷it 是否在集合中

srandmember : 從集合中隨機挑count 個元素

spop :從集合中隨機彈出一個元素\

127.0.0.1:6379> sadd set1 1234(integer) 1127.0.0.1:6379> 127.0.0.1:6379> scard set1(integer) 1127.0.0.1:6379> sismember set1 1(integer) 0127.0.0.1:6379> sismember set1 1234(integer) 1127.0.0.1:6379> SRANDMEMBER set1 21) "1234"2) "7"127.0.0.1:6379> spop set1 11) "6"

  • 有序集合類型

圖片zadd : 添加score 和 element

zrem : 刪除元素

127.0.0.1:6379> zadd zset 1 1234(integer) 1127.0.0.1:6379> 127.0.0.1:6379> zrem zset 1234(integer) 1

zincrby : 增長或減小元素的分數

zcard : 返回元素的總個數

zscore : 返回分數

127.0.0.1:6379> ZINCRBY zset 1 1"1"127.0.0.1:6379> zcard zset(integer) 1127.0.0.1:6379> zscore zset 1"1"

zrange :返回指定索引內升序元素

zrangebyscore : 返回指定分數範圍內升序元素

zremrangebyrank :   刪除指定排名內升序元素

zremrangebyscore :  刪除指定分數內升序元素

127.0.0.1:6379> zadd player 1000 ronaldo 900 messi 800 c-aa(integer) 3127.0.0.1:6379> zrange player 0 -11) "c-aa"2) "messi"3) "ronaldo"127.0.0.1:6379> zcount player 900 1000(integer) 2127.0.0.1:6379> zrangebyscore player 1000 10011) "ronaldo"127.0.0.1:6379> 127.0.0.1:6379> zremrangebyrank player 0 1(integer) 2127.0.0.1:6379> zrange player 0 -11) "ronaldo"
圖片在這裏插入圖片描述
相關文章
相關標籤/搜索