Redis數據庫
-
Redis簡介
- Redis (Remote Dictionary Server)是用C語言編寫的開源數據庫,可以將數據放入內存,也可以持久化存儲到磁盤
- Redis不同於傳統關系型數據庫,以key-value的形式存儲數據,value可以為string字符串、list列表、set集合、sorted sets有序集合、hash哈希等多種類型
- Redis早期由意大利人Salvatore Sanfilippo開發(網名antirez),2010年作者受雇於VMWARE,2013年由子公司Pivotal Software支持,從2015年起,由Redis實驗室支持其開發工作
- Redis將數據放置與內存,性能優越,官方給的測試結果:讀取數據速度是110000次/s,寫入速度為81000次/s
- Redis開源免費,提供多種編程語言接口,包括主流的:java,python,php,c#等幾十種編程語言,遵從BSD協定
-
適用於:
- 緩沖高並發讀寫的實時數據
- 網站最新信息列表,用戶點擊計數器,各類信息的實時排名
-
不適用於:
- 對事務要求高的業務
- 需要使用SQL的業務場景
-
Redis的安裝
-
下載安裝包
-
上傳安裝包至服務器
-
安裝依賴及redis軟件
-
相關文件位置
- 配置文件位置:/etc/redis.conf
- 數據文件位置:/var/lib/redis
- 默認日志文件位置:/var/log/redis/redis.log
-
修改配置文,允許遠程連接
-
啟動服務
-
關閉服務
-
本地連接redis
-
遠程連接
redis-cli -h 192.168.10.40
或
redis-cli -h 192.168.10.40 -p 6379
-
使用圖形化工具連接redis
安裝后打開並進行連接
默認開啟16個庫,可以在配置文件中使用參數databases指定默認開啟的庫的數量
-
-
redis中常用數據類型
-
strings
- value值是字符串
-
Lists
- value值是一系列string字符串的集合,按照插入的順序排列
-
Sets
- value值是一系列string字符串元素的集合,不能有重復值,不排序
-
Sorted sets
- value值是一系列string字符串元素的集合,但是集合中的每個元素都關聯一個浮點數值,叫做score,集合元素按照score排序,比較容易實現范圍查找,如:列出集合元素中的前10或后10名
-
Hashes
- value值是多個鍵值對(field:value),鍵值對由field和其對應的value組成類似於編程語言中的hash數組
-
-
redis中的key
- redis的key用來定位數據,可以想象成引用數據的標簽
- key在當前數據庫中不能有重值(默認16個數據庫,數據庫可以想象成分類目錄,一般情況一個業務系統的數據放在一個數據庫中)
- key的名字不宜過長(超過1024),否則影響性能
- key最多可以存512M
-
String 字符串
set mykey values #設置key為mykey,value為values的鍵值對 get mykey #獲取mykey對應的value值
-
incr 遞增 incrby 指定遞增步長
-
decr 遞減 decrby 指定遞減步長
-
mset 一次性為多個key賦值,mget 一次性獲取多個key的值
-
del 刪除鍵值對,可同時刪除多個
-
exists 判斷指定的key是否存在,存在返回1,不存在返回0
-
typer 查看指定key對應的value的數據類型
-
expire 設置key過期時長(單位:秒),ttl 查看剩余生命周期(單位:秒),超過設置時長后會自動清除指定的key
-
-
Lists 列表
-
lpush 從左側添加元素到列表中(新添加的元素位於列表首部)
-
lrange 從左側顯示列表中的元素
lrange mylist 0 -1 #顯示列表中的元素 從0到-1,-1為最后一位
-
llen 獲得列表中元素的個數
-
rpush 從右側添加元素到列表(新添加的元素位於列表尾部)
-
rpop 刪除右側一個元素(尾部刪除)
-
lpop 刪除左側一個元素(首部刪除)
-
linsert 將元素插入指定位置(after位於指定元素后,defore位於指定元素前)
-
lset 修改指定位置元素的值(坐標從0開始)
-
lrem 刪除指定的value
lrem mylist1 0 "a" lrem mylist1 1 "c" lrem mylist1 -1 "hello" #格式:lrem key count value #count #為0 刪除所有value #大於0 從左刪除count個value(從首部) #小於0 從右刪除count個value(從尾部)
-
ltrim保留指定范圍內的元素,其他的刪除
-
-
Sets 集合
-
sadd設置key對應的value集合
-
smembers 查看指定key的集合中的成員
注:集合成員不會按照插入的順序顯示
-
sismember 查看指定元素是否屬於指定的集合,1為真,0為假
-
sinter查看多個集合的交集
-
sdiff 查看多個集合中的差集
注:順序不同差集也不相同,那個集合在前顯示那個集合中有而其他集合中不存在的元素
-
sunion 查看多個集合的合集
-
scard 查看集合中元素的個數
-
-
Sorted sets 有序集合
-
zadd 設置key對應的value的有序集合
zadd myzset 1 a 2 b 3 c #格式:zadd key [NX|XX] [CH] [INCR] score member [score member ...] #排序按照score從小到大排序,當score相同時比較member
-
查看集合中的元素
-
顯示集合中的元素及score
-
zrevrange顯示有序集合的元素(score從大到小)
-
修改score值
-
-
hashes 哈希
-
hmset 將多個field與value的鍵值對寫入到指定key中,Redis 中每個 hash 可以存儲 2的32次方-1個鍵值對(40多億)
hmset users:10 uid 15 uname zhangsan password 1234 birth 1990-10-10 #語法格式:hmset key field value [field value ...]
-
hget 獲取指定key中指定field對應的value
-
hmget 獲取指定key中指定的多個field對應的value
-
hgetall 獲取指定key中所有field和value鍵值對數據
-
hlen 獲取指定key中所有field和value鍵值對的數量
-
hkeys 獲取指定key中所有field數據
-
hvals 獲取指定key中所有field對應value數據
-
hdel 刪除指定key中多個field及其對應value數據
-
hset 修改key中一個field對應的值
-
hmset 修改key中一個field或多個field對應的值
-
-
其他常用命令
-
flushdb清空當前數據庫的所有值(慎用)
-
select 切換數據庫
注:端口號后中括號內的數值標識了當前所處的數據庫
-
scan 查看當前數據庫中所有的key
scan 0 scan 0 match * count 3 scan 3 match * count 3 #語法格式 scan cursor [MATH pattern] [COUNT count] #cursor 游標 #SCAN命令是一個基於游標的迭代器 #游標為 0 時,服務器將開始一次新的迭代, 返回值為 0 的游標時, 表示迭代已結束 #可以使用返回的游標作為繼續下一次迭代顯示的游標 #MATH 匹配模式 * 匹配所有 #count 指定顯示的數量
-