1. 程式人生 > 其它 >Redis學習第二天

Redis學習第二天

技術標籤:非關係型資料庫redis

Redis學習第二天

啟動後知識串講

1. 單程序單執行緒
  • 採用多路 I/O 複用技術可以讓單個執行緒高效的處理多個連線請求(儘量減少網路IO的時間消耗)

  • why?

    1. 多執行緒處理可能涉及到鎖
    2. 多執行緒處理會涉及到執行緒切換而消耗CPU
    3. 單程序不存線上程安全問題

    缺點:無法發揮多核CPU效能,不過可以通過在單機開多個Redis例項來完善

2. 預設16個兄弟一起站臺

預設16個數據庫,類似陣列下表從零開始,初始預設使用零號庫

3. 切換資料庫命令
select index       --------index表示資料庫的索引,從0開始,(命令切換資料庫)
4. 常用基本命令
dbsize          -----檢視的當前資料庫的key的數量
flushdb         -----清空當前庫
flushall        -----通殺全部庫

5. 其他說明

同一密碼管理,16個數據庫都是同樣密碼,要麼ok要麼一個也連不上

Redis索引都是從0開始

redis的資料型別(掌握)

1. 概述
  • 使用Redis進行應用設計和開發的一個核心概念是資料型別。與關係資料庫不同,在Redis中不存在需要我們擔心的表,在使用Redis進行應用設計和開發時,我們首先應該考慮的是Redis原生支援的哪種資料型別陽適合我們的應該場景,此外,我們無法像在關係資料庫中那樣,使用sql來操作Redis中的資料,相反,我們需要直接使用API傳送資料反對應的命令,來操作想要操作的資料。redis的資料型別相當於Map型別
2.字串型別Map<String,String>
  • 字串型別是程式語言和應用程式中最常見和最有用的資料型別,也是Redis的基本資料型別之一,事實上,Redis中所有鍵都必須是字串。
3. list資料型別Map<String,List<'Object’或‘String’>>(注意實際使用沒有單引號)
  • 列表是應用我只是應該程式開發中非常有用的資料型別之一,列表能存在一組物件,因此它也可以被用於棧或者佇列,在Redis中,與鍵相關的聯的值可以是字串組成的列表,Redis中的列表更像是資料結構中的雙向連結串列。
4. hash資料型別Map<String,Map<Object,Object>>
  • 雜湊表示欄位和值之間的對映關係,與JAVA中的Map類似,Redis資料集本身就可以看做一個雜湊,其中字串型別的鍵關聯到如字串和列表之類的資料物件,而Reidis的資料物件也可以再次使用雜湊,其欄位和值必須 是字串。
5. set資料型別Map<String,Set<Object,Object>>
  • 集合型別是由唯一,無序物件組成的集合(collection).它經常用於測試某個成員是集合中,重複項刪除和集合運算(求並,交,差集),Redis的值物件可以是字串集合。
6. zset(sortset)資料型別
  • 有序集合是一個類似於set但是更復雜的資料型別,單詞sorted意為著這種集合中的每個元素都有一個可用於排序的權重,並且我們可以按順序從集合中得到元素在某些需要一個保持資料有序的場景中,使用這種原生的序的特性是很方便的。

Redis相關命令詳解(掌握)

  • 關於命令的學習查詢看這個網站http://www.redis.net.cn/order/

    或者:http://redisdoc.com/

1.常用命令
keys * 獲取所有的key
select 0 選擇第一個庫
move myString 1 將當前的資料庫key移動到某個資料庫,目標庫有,則不能移動
flushdb 清除指定庫
randomkey  從當前資料庫中隨機返回
type key 型別
del key1 刪除key
exists key 判斷是否存在key
expire key 10  過期
pexpire key 1000 毫秒
persist key 刪除過期時間
ttl key 檢視還有多少秒過期,-1表示永不過期,-2表示已過期

2.String型別相關命令
語法:set key value
set name cxk    設定name為鍵,cxk為值
get name     獲取鍵為name的值
getrange name 0 -1       字串分段,(0   -1)表示全部    (0  -2)表示從後邊減兩個
                           (0          2)表示第012三個字元,也就是字串長3
getset name new cxx   設定新值並且返回顯示舊值
mset  key1 key2 批量設定值,其中key(鍵  值)都要有
mget key1 key2 批量獲取值
setnx key value  不存在就插入(not EXISTS)
setrange  key index value   從index開始替換value
incr  age 遞增,每執行一次就遞增一次
incrby age  10  遞增,每執行一次就遞增10次,,10表示步長
decr age 遞減
decr age  10 遞減
incrbyfloat  增減浮點數
append 追加
strlen  長度
object encoding key    得到key的型別  ,string裡面有三種編碼
                       1. int 用於能夠副作用64位有符號整數表示的字串
                       2. embstr 用於長度小於或等於44位元組  Redis3.x中是39位元組,這種                           型別的編碼在記憶體使用時效能更好
                       3. raw  用於長度大於44位元組的

3. lisi集合陣列
語法:  lpush key values
lpush mylist a b c  左插入
lpush mylist x y z  右插入
lrange mylist 0 -1 取出資料集合  (0 -1)是取出所有   (0  1)取出第一個和第二個
lpop mylist 彈出集合最後一個元素,彈出去就沒有了
rpop mylist 彈出第一個元素,彈出去就沒有了
llen mylist 長度
lrem mylist count value 刪除
         |- COUNT的值可以是以下幾種:
          |-- count>0:從表頭開始向表尾搜尋,移除與 VALUE 相等的元素,數量為 COUNT 。
          |-- count<0:從表尾開始向表頭搜尋,移除與 VALUE 相等的元素,數量為 COUNT 的絕                       對值。
          |-- count=0:移除表中所有與 VALUE 相等的值
lindex mylist 2 指定索引的值
lset mylist 2 n 索引設值
ltrim mylist 0 4 
             |-- 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定                  區間之內的元素都將被刪除。
             |-- 下標 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。 
				 你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數                  第二個元素,以此類推。
linsert mylist before a  插入
linsert mylist after b  插入
           |-- 元素,以此類推。
linsert mylist before a 插入
linsert mylist after a 插入
            |--命令用於在列表的元素前或者後插入元素。 當指定元素不存在於列表中時,不執行任                何操作。 
			   當列表不存在時,被視為空列表,不執行任何操作。 如果 key 不是列表型別,返回                一個錯誤。
rpoplpush list list2  轉移列表的資料
           |-- 命令用於移除列表的最後一個元素,並將該元素新增到另一個列表並返回。

4. hash
語法:hset key value-key  value-key
hset myhash name cxx
   |-- 命令用於雜湊表中的賦值
   |-- 如果雜湊表不存在,一個新的雜湊表被建立並進行HSET操作
   |-- 如果欄位已經存在於雜湊表中,舊值將被覆蓋
hget myhash name 
hmset myhash name cxx age 25 note "i am notes"
hmget myhash name age note
hgetall myhash 獲取所有的
hexists myhash name 是否存在
hsetnx myhash score 100 設定不存在的,如果存在,不做處理
hincrby myhash id 1 遞增
hdel myhash name 刪除
hkeys myhash 只取key值
hvals myhash 只取value
hlen myhash 長度
5. set
sadd myset redis
smembers myset 資料集合
srem myset set1  刪除
sismember myset set1 判斷元素是否在集合中
scard key name 個數
sdiff key1 key2 ......|sinter|   sunion     操作:集合間運算:差集|交集|並集
srandmember key count 隨機獲取集合中的元素,後邊加數字,表示獲取一個數組
spop 從集合中彈出一個元素
6. zset
zadd zset 1 one      單個新增
zadd zset 2 two 3 three   多個新增
zincrby zset 1 one 增長分數(score的值)
zscore zset two 獲取分數
zrange zset 0 -1 withscores  範圍值
zrangebyscore zset 10 25 withscores 指定範圍的值(從小到大排列)
zrangebyscore zset 10 25 withscores limit 1 2   分頁
zrevrangebyscore zset 10 25 withscores     指定範圍的值(從大到小排列)
zcard zset 元素的數量
zcount zset 獲取指定分數範圍內的元素個數
zrem zset one two 刪除一個或多個元素
zremrangebyrank zset 0 1 按照排名範圍刪除元素
zremrangebyscore zset 0 1 按照分數範圍刪除元素
zrank zset 0 -1 分數最小的元素排名為0
zrevrank zset 0 -1 分數最大的元素排名為0
zinterstore  計算給定的一個或多個有序集的交集,預設情況下,結果集中某個成員的 score 值是              所有給定集下該成員 score 值之和.
ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3   
                            |-- 公司決定加薪。。。除了程式設計師。。。
                   |-- weights後邊 1表示第一個集合都乘1,3表示第二個幾個都乘3