簡介
是以key-value形式存儲, 和傳統的關係型數據庫不一樣, 不一定遵循傳統數據庫到的一些基本要求(非關係型的, 分佈式的, 開源的, 水平可擴展的)
優點:
對數據高併發讀寫
對海量數據的高效率存儲和訪問
對數據的可擴展性和高可用性
缺點:
redis(ACID處理非常簡單)
無法做到太複雜的關係數據庫模型
數據類型
Redis是以key-value store存儲, data structure service數據結構服務器。鍵可以包含: 字符串, 哈希, 鏈表, 集合, 有序集合。這些數據集合都支持push/pop, add/remove及取交集以及更豐富的操作, redis支持各種不同的方式排序, 爲了保證效率, 數據都是緩存在內存中, 它也可以週期性的把更新的數據寫入磁盤或者把修改操作寫入追加到文件中
Redis一共分爲五種基本數據類型: String, Hash, List, Set, ZSet
String類型
String類型包含很多種類型的特殊類型, 並且是二進制安全的。
set和get方法
設置值: set name bhz 取值 get name
刪除值: del name
使用setnx(not exist)
name 如果不存在進行設置, 存在就不需要進行設置了, 返回0
使用setex(expired)
setex color 10 red設置color的有效期爲10秒, 10秒後返回nil(在redis裏nil表示空)
使用setrange替換字符串:
set email [email protected]
setrange email 10 ww(10表示從第幾位開始替換, 後面跟上替換的字符串)
使用一次性設置多個和獲取多個值的mset, mget方法
mset key1 bhz key2 bai key3 28
對應的
mget key1 key2 key3方法
對應的也有msetnx和mget方法
一次性設置和取值的getset方法
set key4 cc
getset key4 changechun返回舊值並設置新值的方法
incr和decr方法: 對某一個值進行遞增和遞減
incrby和decrby方法: 對某個值進行指定長度的遞增和遞減
append [name]方法: 字符串追加方法
strlen [name]方法: 獲取字符串的長度
Hash類型
Hash類型是String類型的field和value的映射表, 或者說一個String集合。它特別適合存儲對象, 相比較而言, 將一個對象類型存儲在Hash類型裏要比存儲在String類型裏佔用更少的內存空間, 並方便存取整個對象。
形如: hset myhash field1 hello(含義是hset是hash集合, myhash是集合名字 field1是字段名hello爲其值) 使用hget myhash field1獲取內容, 也可以存儲多個值。
hmset可以進行批量存儲多個鍵值對: hmset myhash sex nan addr Beijing, 也可使用hmget進行批量獲取多個鍵值對
同樣也有hsetnx, 和setnx大同小異
hincrby和hdecrby集合遞增和遞減
hexists是否存在key 如果存在返回 不存在返回0
hlen 返回hash集合裏的所有的鍵值
hdel 刪除指定hash的field
hkeys 返回hash裏所有的字段
hvals 返回hash的所有value
hgetall 返回hash裏所有的key和value
List類型
List類型是一個鏈表結構的集合, 其主要功能有push, pop, 獲取元素等。更詳細的說, List類型是一個雙端鏈表的結構, 可以通過相關操作進行集合的頭部或者尾部添加刪除元素, list的設計非常簡單精巧, 即可以做爲棧, 又可以作爲隊列。
lpush方法: 從頭部加入元素(棧) 先進後出
lpush list1 “hello”
lpush list1 “world”
lrange list1 0 -1
rpush方法: 從尾部加入元素(隊列) 先進先出
rpush list2 “beijing”
rpush list2 “sxt”
lrange list2 0 -1
linsert方法: 插入元素
linsert list3 before [集合的元素][插入的元素]
lset方法: 將指定下標的元素替換掉
lrem方法: 刪除元素 返回刪除的個數
ltrim方法: 保留指定key的值範圍內的數據
lpop方法: 從list的頭部刪除元素, 並返回刪除元素
rpop方法: 從list的尾部刪除元素, 並返回刪除元素
rpoplpush方法: 第一步從尾部刪除元素, 然後第二步並從頭部加入元素
lindex方法: 返回名稱爲key的list中index位置的元素
llen方法: 返回元素的個數
set類型和zset類型
set集合是string類型的無序集合, set是通過hashtable實現的, 對集合可以取交集, 並集, 差集
saddd方法: 向名稱爲key的set中添加元素, set集合不允許重複元素
smembers: 查看set集合的元素
srem方法: 刪除set集合的元素
spop方法: 隨機返回刪除的key
sdiff方法: 返回兩個集合的不同元素(哪個集合在前面就以哪個集合爲標準)
sdiffstore方法: 將返回的不同元素存儲到另外一個集合裏
這裏是把set1和set2的不同元素(以set1爲準)存儲到set3集合裏
sinter方法: 返回集合的交集
sinterstore方法: 返回交集結果, 存入set3中
sunion方法: 取並集
sunionstore方法: 取得並集, 存入set3中
smove方法: 從一個set集合移動到另一個set集合裏
scard方法: 查看集合裏元素個數
sismember方法: 判斷某元素是否爲集合中的元素, 返回1代表是集合中的元素, 0代表不是
srandmember方法: 隨機返回一個元素
zdd向有序集合中添加一個元素, 該元素如果存在, 則更新順序, 在重複插入的時候, 會根據順序屬性更新
zrem 刪除名稱爲key的zset中的元素member
zincrby以指定值去自動遞增或者減少, 用法和之前的incrby類似
zrangebyscore 找到指定區間範圍的數據進行返回
zremrangebyrank 刪除1到1
zremrangebyscore 刪除指定序號
zrank 返回排序索引 從小到大排序
zrevrank 返回排序索引 從大到小排序
zrangebyscore zset1 2 3 withscores 找到指定區間範圍的數據進行返回
zcard 返回集合裏所有元素的個數
zcount 返回集合中score中給定區間中的數量
Redis高級命令及特性
返回滿足的所有鍵keys *(可模糊匹配)
exisits是否存在指定的key
expire設置某個key的過期時間, 使用ttl查看剩餘時間
persist取消過期時間
select 選擇數據庫 數據庫爲0到15(一共16個數據庫)默認進入的是0數據庫
move [key][數據庫下標]將當前數據中的key轉移到其他數據庫中
randomkey隨機返回數據庫裏的一個key
rename重命名key
echo 打印命令
dbsize 查看數據庫的key數量
info 獲取數據庫信息
config get實時傳輸收到的請求 config get * 返回所有配置
flushdb 清空當前數據庫, flushall 清空所有數據庫