//基于key-value的內存數據庫
// 每秒可讀11W次
// MySQL 是 1000此
[toc]
## 安裝(windows)
[https://github.com/microsoftarchive/redis/releases](https://github.com/microsoftarchive/redis/releases)
一路到底 會默認裝上服務和path,只需要輸入`redis-cli`r讓客戶端連上服務器
## 用途
- 集中式會話管理(session)

- 緩存服務器
不用再從數據庫從頭開始讀,第一次從數據庫中讀取數據后會放在緩存中

## 優勢
- 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的數據類型 – Redis支持二進制的字符串、列表、哈希值、集合和有序集合等數據類型操作。
- 原子性 – Redis的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行
- 單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
- 豐富的特性 – Redis還支持 發布/訂閱, 通知, key 過期等等特性。
## 啟動服務器
```
redis-server.exe redis.windows.conf
```
## 啟動客戶端
cli -》client
```
redis-cli.exe -h 127.0.0.1 -p 6379
```
## info
查看基本信息
```
info Memory //查看memory模塊的信息
```
## flushall
刪除數據庫
## set:設置值
```
set name ahhh
```
## get:獲取值
```
get name
```
```
<<<
ahhh
```
### getrange
索引從0開始,包前包后,支持負數
```
getrange name 1 2
getrange name 1 -1
```
## expire xx `<howLong>`
```
expire homepage 10 //讓homepage緩存10秒
```
如果是set,整個都會過期,而不能只讓其中的某一項過期
## ttl
```
ttl a
```
查看還有多久過期
## set:sadd 和 smembers
set數據結構具有天生的去重性
```
sadd my_set_1 1
sadd my_set_1 2
sadd my_set_1 2
sadd my_set_1 3
smembers my_set_1
1) "1"
2) "2"
3) "3"
```
### sismember
查看2在不在my_set_1中
```
sismember my_set_1 2
```
### scard
返回my_set_1里有多少個成員
```
scard my_set_1
```
### srem
刪除
### spop
隨機取一個值**移除**
### srandmember
隨機取一個值
## sorted set
由跳躍表skip list實現
### zadd
下面的數字是后面成員的編號
```
zadd my_sorted_set_1 100 a 0 b 200 c -1000 d
```
### zrangebyscore 和 zrevrangebysocre
取0(包括)到100(包括)編號的成員
`withscores`參數決定是否在返回值中帶上編號
```
zrangebyscore my_sorted_set_1 0 100 [WITHSCORES]
```
降序取
```
zrevrangebyscore my_sorted_set_1 100 0 [WITHSCORES]
```
## hash set
相當于js中的
```
map.set('abc',123);
map.set('def',456);
```
### hset
hset只能同時設置一對值 key-value
```
hset my_hash_1 abc 123
```
要想設置多組值,請使用`hmset`
### hgetall
```
hgetall my_hash_1
```
## incr:增加
遞增1
```
incr age
```
### incryby
也可以為負數
```
incrby age 5
```
## decr
### decrby
## exists:存在否
## del:刪除
## type \<key\>
```
type name
```
```
<<<
string
```
## 哈希值
哈希值是一個字符串類型的Key和值的映射表,特別適合用于存儲對象
### hset
一次只能設置一組鍵值對

### hmset
一次允許設置多組鍵值對

### hget hgetall

### hkeys

并沒有hvalues,只有keys = =!
### hdel
## 列表
### lpush rpush , lrange
### lpop rpop
### LINDEX \<key\>
### LLEN \<key\>
### LREM \<key\>
刪除
```
LREM myid 0 8
```
其中`0`表示全局匹配, `8`是匹配項(匹配值,不是匹配 key)
## 集合
### SADD
### SREM
### SCARD
### SINTER 交集
### SDIFF 差集
SDIFF A B 和 SDIFF B A 不一樣
### SUNION 并集
## 有序集合
有序集合和集合一樣也是字符串的集合,而且不能重復 不同之外是每個集合都會關聯一個double類型的分數,redis可以通過這個分類來為集合中的元素進行從小到大排序,元素不能重復,但分數可以重復
### ZADD ZCARD ZRANGE
會按照分數大小(從小到大)插入
```
ZADD stus 60 zhangsan 80 lisi 90 wangwu
```

默認不顯示分數,如果想:

### ZREM