一. redis
1. 含义:
remote dictionary server 远程字典服务, c语言编写的;
2 特点
(1)是nosql(not only sql) 类型的数据库, key: value键值对
(2)基于内存存储数据, 提供了多种持久化机制. 性能快:11万次读/s, 8万次写/s
(3)提供主从, 哨兵, 集群的搭建方式.防止宕机.
3 安装
3.1 docker-compose.yml文件
version: '3.1' services: redis: image: daocloud.io/library/redis:5.0.7 container_name: redis restart: always environment: - TZ=Asia/Shanghai ports: - 6379:6379
3.2 安装
进入opt目录, 创建docker_redis目录, 进入该目录并创建docker-compose.yml文件.
3.3 进入容器
docker-exec -it 容器id bash: 该命令必须在容器中
redis-cli: 该命令是redis提供的,只有使用了该命令才能操作redis数据库
4. redis常用命令(参考文档http://redisdoc.com/)
4.1 redis数据结构
* key-string:
* key-hash : hash是map, 存储kv结构的对象(对象操作)
* key-list: 有序可重复的列表 (栈和队列)
* key-set: 无序不可重复的集合(交集差集并集)
* key-zset: 有序(根据分数排序)的 不可重复 的set. 每一个value都有一个分数, 适合积分 排名等情况
4.2 数据结构的操作
4.2.1 key-string结构的操作:
(1) 添加: set key value
(2) 取值: get key
(3) 批量添加 : mset key value [key value key value....]
批量获取 : mget key [key1 key2...]
(4) 自增命令(自增1, 比如点赞) incr key
自减 (自减1 ) decr key
(5) 自增自减指定数量 incrby/decr key increment/decrement
(6) 设置生存时间 (按秒)
setex key second value
(7) 设置值, 如果值不存在(nx: not exist), 则添加, 如果存在, 则什么都不做
setnx key value
(8) 在value基础上追加 append key value
4.2.2 hash操作
(1) 存储hash数据
hset key field value
(2) 获取hash数据
hget key field
(3) 批量存储操作
hmset key field value [field value field value...]
(4) 批量取得操作
hmget key field [field field..]
(5) 自增
hincrby key field increament
(6) 不存在则添加
hsetnx key field value
(7) 删除field
hdel key field [field ...]
(8) 获取全部key和value
hgetall key
获取所有field
hkeys key
获取所有value
hvals key
获取field的数量
hlen key
4.2.3 list操作
数据是有序的, 可以从左侧插入, 也可以从右侧插入, 也可以插入到某个位置
* 插入:
(1) 左侧插入 : lpush key value [value ...]
(2) 右侧插入 : rpush key value [value ...]
(3) 替换插入 : lset key index value
(4) 插入 : 如果key不存在 则什么都不做 lpushx / rpushx key value
* 获取
(1) 左侧弹出 lpop key
(2) 右侧弹出 rpop key
(3) 弹出多个 (start从0开始, stop 的 -1 表示最后一个, -2表示倒数第二个)
lrange key start stop
(4) 获取指索引定位置的value(index从0开始)
lindex key index
(5) 获取list的长度
llen key
*删除
(1)删除count个value,(count > 0, 表示从左往右删除, count < 0, 表示从右往左删除, count == 0 表示全部删除)
lrem key count value
(2) 保留列表中的数据 (注意: 保留的数据包括stop位)
ltrim key start stop
(3) 将A列表的末位弹出并添加到B列表的首位
rpoplpush key1 key2
4.2.4 set操作
(1)存数据:
sadd key member [member...]
(2)查看数据:
smembers key :查看所有
sismember key member:
(3) 删除数据
spop key [count]
srem key member [member1...]
(4) 交集
sinter key1 key2 [key3...]
(5) 并集
sunion key1 key2 [key3...]
(6)差集
sdiff key1 key2...
4.2.5 zset: 每个值都有分数, 有序
增: (score必须是数, member 不允许重复)
zadd key socre member [score member ...]
修改score (如果member不存在, 就相当于add命令)
zincrby key increment member
查:
zrange key start stop [withscores]: 从小到大查看; sart从1开始, stop -1表示最后一位;
zrevrange key start stop [withscore]: 从大到小查看
zrangebyscore key min max [withscore] [limit offset count ]: 根据分数区间返回members(包含max的member, 如果不包含在min/max的左 边加"("来表示 ), limit 表示偏移量, offset表示 数量, min的最小值是-inf, max的最大值是+inf;
zscore key member: 查看某个member的score
zcount key min max : 查看范围内的member的数量.
删除:
zrem key member
排序: strt 从0开始, stop -1表示倒数第一个, 查询结果包含stop
zrange key start stop [withscore]
反转: zrevrang key start stop [withscore]
4.3 key常用命令
keys parttern: 查看所有key; 其中parttern可以是 * , xx* 或者 *xx
exists key [key...]: 查看key是否存在,返回1或0, 有一个存在就返回1.
del key [key...]: 删除
设置key的生存时间(能生存多长时间):
expire key second: 单位是秒
pexpire key millionsecond: 单位是毫秒
设置key的生存时间点(能生存到那个时间戳)
expireat key timestamp:单位是秒
pexpireat key timestamp:单位是毫秒
查看剩余生存时间: 返回值特殊情况: -2表示当前key不存在, -1表示key没有设置生存时间
ttl key
pttl key
移出key的生存时间: 返回值 1: 移出成功, 0 : key本来就没有设置生存时间,
persist key
选择操作的库: 0-15号库, 默认0 号库
select 0~15
移动key到另外一个库中
move key db
4.4 库的常用命令
清空当前数据库: flushdb
清除全部数据库: flushall
查看keys的数量: dbsize
查看最近一次redis保存数据到磁盘的时间戳: lastsave
实时监控: monitor,