nosql not only sql
用户画像:
热点数据:经常被使用的数据
mysql
## 安装
- 可以使用yum 安装,要先配置epel源
```shell
yum install -y redis
```
- 可以编译安装
```SHELL
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xf redis-5.0.5.tar.gz
cd redis-5.0.5/
make
```
## redis 可执行文件
```SHELL
redis-benchmark #性能测试
redis-check-aof # 检查修复aof文件
redis-check-rdb # 检查修复rdb文件
redis-cli # redis的客户端
redis-sentinel # redis的集群
redis-server # redis的服务端
redis-trib.rb #集群管理
```
## 启动redis
```SHELL
./src/redis-server 默认端口是6379,默认启动会占用终端
```
## 性能测试
```SHELL
./src/redis-benchmark -q
PING_INLINE: 73855.24 requests per second
PING_BULK: 73800.73 requests per second
SET: 74074.07 requests per second
GET: 72833.21 requests per second
INCR: 73637.70 requests per second
LPUSH: 73855.24 requests per second
RPUSH: 70175.44 requests per second
LPOP: 72202.16 requests per second
RPOP: 74183.98 requests per second
SADD: 74962.52 requests per second
HSET: 75642.96 requests per second
SPOP: 73746.31 requests per second
LPUSH (needed to benchmark LRANGE): 74850.30 requests per second
LRANGE_100 (first 100 elements): 48379.30 requests per second
LRANGE_300 (first 300 elements): 24172.11 requests per second
LRANGE_500 (first 450 elements): 18670.65 requests per second
LRANGE_600 (first 600 elements): 15384.62 requests per second
MSET (10 keys): 78186.08 requests per second
默认是100000,50个同时发起连接
```
## 连接
```shell
./src/redis-cli
-h ip地址
-p 端口
-s 套接字
-a 密码
-n 指定redis的库
redis的命令是不区分大小写
```
### redis的数据类型
- string
- hash
- list
- set
- zset
## 命令相关
### ping
用来测试redis是否连通,返回值是pong
### info
获取系统的信息
### echo
打印内容,测试使用
### quit
退出
### select
切换redis的库,总共有16个,0-15
### del
删除指定的一个或者多个key,不存在的key忽略
### exists
判断key 是否存在,存在是1,不存在是0
### expire key seconds
给指定的key设置存活时间,当key过期以后,就自动删除
### ttl
查看key的存活时间,-2 key不存在 -1 永久生效
### keys pattern
keys a?
"ab"
查找所有符合pattern 的key,支持通配符
### move key db
移动当前的key到指定的db里面,成功返回1,失败返回0
### pexpire key 毫秒
给一个key 设置过期时间,单位是毫秒
### pttl key
查看key的存活时间,但是为毫秒
### randomkey
随机获取一个key,但是不删除,如果数据库为空,则返回空
### rename
重命名key,如果源key不存在,则报错,如果目标key存在,则覆盖
### renamenx
重命名key,如果源key不存在,则报错,如果目标key存在,则不变
### type
查看key所存储的数据类型,如果没有这个key,则返回none
## string
### set
设置key value
如果key存在,则覆盖,不存在,则新建
ex second 设置key的存活时间,单位是秒
px 毫秒 设置key的存活时间,单位是毫秒
nx 如果键不存在,则新建,如果存在,则返回nil
xx 只有键存在,才能操作
### get
获取key对应的value,只能获取一个,如果key存在,则返回值,如果key不存在,则返回nil
### mset
批量创建key vlaue对应关系,会覆盖已存在的key
### mget
批量获取key,如果不存在,则返回nil
### getset
给指定的key设置新value,并返回原来的value,如果key不存在,则返回nil
### strlen
返回value的长度
### append
如果key存在,则追加,如果key不存在,则新建
### incr
将key中存在的数加1,只能对数字有效
### decr
将key中存在的数值减1,只能对数字有效
### incrby
将key中存在的数值指定增加多少,只对数字有效
### decrby
将key中存在的数值减少指定的值,只能对数字有效
#### getrange
切片,同python类似,不能使用步长
### incrbyfloat(默认保留17位)
将key中存在的数值增加指定的浮点数
## list
### lpush
将一个或者多个value插入到列表的头部
### lpop
移除并返回列表key的头一个元素
### lrange
查看列表指定的元素,全部显示是0,-1
### rpush
将一个或者多个value插入到列表的尾部(最后边)
### rpop
删除尾部的值
### rpushx
将value插入到key的尾部,key必须存在才可以
### lpushx
将value插入到key的头部,key必须存在才可以
### lindex
从表头开始,获取下标为index的value
### linsert
将value插入到key指定的元素前或者后
before 前
after 后
如果value不存在,则不操作
### llen
获取列表长度
### lrem
删除列表中的value
- count > 0 从表头往表尾的方向查找,删除指定的个数
- count = 0 全部删除
- count < 0 从表尾的位置往表头的方向查找,删除指定的个数
### lset
替换指定的索引位置的value,如果索引超出范围,则报错
### ltrim
列表的切片(类似于剪切)
## hash
{'db':{"redis":'redis.conf',"mysql':'my.cnf',"nginx":"nginx.conf"}}
### hset
给hash增加key value值
### hlen
获取hash的长度
### hget
获取某个hash里面key的value
### hgetall
获取所有的键值对
### hmset
批量增加键值对
### hmget
批量获取键值对
### hsetnx
给指定的hash增加键值对,如果原来的field存在,则操作无效,如果不存在,则新增
### hkeys
获取hash表中所有的field
### hvals
获取hash表中所有的value
### hdel
删除hash表中的一个或者多个field-value
### hexists
判断hash表中的field是否存在,如果存在,则为1,不存在则为0
### hincrby
给hash表中的field增加指定的数值,只限于数字
### hincrbyfloat
给hash表中的field增加指定的浮点,只限于数字
## set
### sadd
给集合添加值,如果值存在,则什么都不操作,如果值不存在,则添加
### SMEMBERS
获取集合所有的成员
### scard
获取集合的个数
### sdiff
获取两个集合的差集,前面存在,但是后面不存在的
### sinter
获取两个集合的交集
### sunion
获取两个集合的并集
### SISMEMBER
判断元素是否在集合中,如果存在,则为1,如果不存在则为0
### smove
将指定的元素从一个集合移动到另外一个集合中,如果源集合存在,则移动,如果不存在,则忽略,如果目标集合存在,直接移动,如果目标集合不存在,则新建集合并移动
### spop
随机删除指定个数的元素,并把删除的元素打印出来
### SRANDMEMBER
随机获取指定个数的元素
- 默认随机获取一个
- 如果count > 0,
- 如果count大于集合的总数的话,则全部取出
- 如果count小于集合总数的话,则随机取出count个
- 如果count<0,则随机count的绝对值次取出值
### srem
删除指定的一个或者多个元素
zset
set操作里的s换成z
flushall
清空所有