//基于key-value的内存数据库
// 每秒可读11W次
// MySQL 是 1000此
[toc]
## 安装(windows)
[https://github.com/microsoftarchive/redis/releases](https://github.com/microsoftarchive/redis/releases)
一路到底 会默认装上服务和path,只需要输入`redis-cli`r让客户端连上服务器
## 用途
- 集中式会话管理(session)
![](https://box.kancloud.cn/bf8ac52846d69c17fe63ccdd61036e7a_665x326.png)
- 缓存服务器
不用再从数据库从头开始读,第一次从数据库中读取数据后会放在缓存中
![](https://box.kancloud.cn/41cfa590ab70b2e9a121f77e5c5c58b9_664x354.png)
## 优势
- 性能极高 – 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
一次只能设置一组键值对
![](https://box.kancloud.cn/cd2204e64c9a08d9858cbfb4a8f57bb8_304x345.png)
### hmset
一次允许设置多组键值对
![](https://box.kancloud.cn/520ca8776cd1ec01b42cccedcadbe43a_385x193.png)
### hget hgetall
![](https://box.kancloud.cn/0fd642907c5e4f7fac18f10b56e65e68_275x171.png)
### hkeys
![](https://box.kancloud.cn/6d6d67f3501db36dbc8791d04dff1ffe_235x74.png)
并没有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
```
![](https://box.kancloud.cn/e460414dbfe61b88b0bae609383f02cd_471x137.png)
默认不显示分数,如果想:
![](https://box.kancloud.cn/cc68dc9b95e392017332ab159c68583c_375x150.png)
### ZREM