# redis
启动redis服务
redis-server /myredis/redis7.conf
启动redis客户端
redis-cli -a 1111111 -p 6379 --raw(解决中文乱码)
退出不关闭
quit
关闭服务器
单例 redis-cli -a 1111111 shutdow
多例 redis-cli -p 6379 shutdown
## redis 常用命令
### keys
- keys * 查看当前库所有的key
- exists key 判断某个key是否存在
- type key 查看key的类型
- del key 删除key
- unlink key 非阻塞删除,仅仅将keys从keyspace 元数据中删除,真正的删除会在后续异步中操作
- ttl key 查看还有多少秒过期。-1表示永不过期,-2表示已经过期
- expire key 秒钟 为给定的key设置过期时间
- move key dbindex 将当前数据库的key 移动到给定的db数据库
- select dbindex 切换数据库【0-15】默认0
- dbsize 查看当前数据库key的数量
- flushdb 清空当前数据库
- flushall 通杀全部数据库
### String key
- 单值单value
- set key value
- get key
- mset | mget 同时设置/获取多个键值
- getrange/setrange 获取指定区间范围的值
- incr key 递增数字 一定要是数字才能进行加减
- incrby key 2 (increment)
- decr key 递减数值
- decrby key decrement 减少指定的整数
- setlen key 获取字符串长度
- append key value 内容追加
- setnx key value 分布式锁
- getset 先get在set
- 抖音点赞,商品点赞
### List key
- 单key多value
- lpush key value1[value2] 将一个值或多个值插入到已存在的列表的头部
- rpush key value1 [value2] 将一个值或多个值插入到已存在的列表
- lpop key 移出并获取列表第一个元素
- rpop key 移出并获取列表最后一个元素
- lindex key index1 index2 通过索引获取列表中的元素
- llen key 获取列表长度
- lrem key 数字N 给定值V1 删除N个值等于V1的元素
- ltrim key 开始index 结束index 截取指定范围的值然后赋值给key
- rpoplpush 源列表 目标列表 移除列表的最后一个元素,并将该元素添加到另一个列表
- lset key index value 添加指定位置元素 的值
- linsert key before/after 已有值 插入新值 在list某个已有值的前后在添加具体元素
- 微信公众号订阅消息
### Hash key
- KV模式不变,但是V是一个键值对 Map<String,Map<Object,Object>
- hset key field value 将哈希表key中的filed的值设置为value
- hmset key field1 value1 [ field2 value2] 同时将多个 field value(域-值)对设置到哈希表key中
- hget key field 获取在哈希表中指定字段的值
- hmget key field1 [ field2 ] 获取多个在哈希表中指定字段的值
- hgetall key 获取指定key的所有字段和值
- hdel key field1 [ field2 ] 删除一个或者多个哈希表字段
- hlen key 获取哈希表的字段数量
- hexists key field 判断哈希表key中,指定的字段是否存在
- hkeys key 获取所有哈希表中的字段
- hvalues key 获取所有的值
- hsetnx key field value 只要在字段不存在时,设置哈希表字段的值
- hincrby key field increment 为哈希表key中的字段的整数加上增量increment
- hincrbyfloat key field increment 为哈希表key中的字段的浮点数数加上增量increment
- JD购物车早期 设计当前日期不在采用,当前中小厂可用
### Set key
- 单值多value,且无重复
- sadd key member[menber...] 向集合添加一个或者多个元素
- smembers key 遍历集合中的所有元素
- sismember key member 判断元素是否在几个中
- srem key member[member] 删除元素
- scard key 获取集合元素个数
- srandmember key [数字] 从集合中随机展现设置的数字个数元素,元素不删除
- spop key [数字] 从元素中弹出一个元素,出一个删一个
- smove key1 key2 key元素值 将key1里已存在的某个元素赋值给key2
- sdiff key [key...] 集合差集 属于A但不属于B
- sunion key [key...] 集合的并集 属于A+属于B
- sinter key [key...] 集合的交集 属于A,属于B
- 微信抽奖小程序
- 微信朋友圈点赞查看同赞朋友
- qq内推可能认识的人
### Zset key
- 在set基础上,每个val值前加一个score分数值.之前set是k1v1 v2 v3, 现在zset是k1 score1 v1 score2 V2
- ZADD key score member [score member ...] 添加元素
- ZRANGE key start stop [WITHSCORES] 按照元素分数从小到大的顺序 返回索引从start到stop之间的所有元素
- zrevrange key start stop [WITHSCORES] 按照元素分数从大到小的顺序 返回索引从start到stop之间
- ZRANGEBYSCORE key min max [WITHSCORES1] [LIMIT offset count] 获取指定分数范围的元素 limit 作用是返回限制 开始下标 多少步
- ZSCORE key member 获取元素的分数
- ZCARD key 获取集合中元素的数量
- zrem key 某score下对应的value值,作用是删除元素
- ZINCRBY key increment member 增加某个元素的分数
- ZCOUNT key min max 获得指定分数范围内的元素个数
- zrank key values值,作用是获得下标值
- zrevrank key values值,作用是逆序获得下标值
### bitmap key
- 由0和1状态表现的二进制位的bit数组
- setbit key offset value setbit 键 偏移位 只能零或者1 Bitmap的偏移量是从零开始算的
- getbit key offset 得到key位图中 偏移量offset 的值
- strlen key 统计字节数占用多少
- bitcount key 全部键里面含有1的有多少个?
### 事务
- 可以一次执行多个命令,本质是一组命令的集合。个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞
- 一个队列中,一次性、顺序性、排他性的执行一系列命令
- 正常执行 MULTI 开启事务 中间命令 EXEC执行事务
- 放弃事务 MULTI 开启事务 中间命令 DISCARD放弃执行事务
- 全体连坐 MULTI 开启事务 中间命令出错时 全部不执行
- 冤头债主 MULTI 开启事务 中间命令运行时出错时 出错的不执行
- watch监控 watch key监控key MULTI 开启事务 中间命令 EXEC执行事务 如果在监控的key执行前被修改了 放弃执行事务
- unwatch 放弃监控
- 小节
- 开启: 以MULTI开始一个事务
- 入队: 将多个命令入队到事务中接到这些命令并不会立即执行而是放到等待执行的事务队列里面
- 执行:由EXEC命令触发事务
### 管道
- 面试题 如何优化频繁命令往返造成的性能瓶颈?
- 定义:pipeline是为了解决RT往返回时,仅仅是将命令打包一次性发送对整个Redis的执行不造成其它任何影响
- 批处理命令变种优化措施,类似Redis的原生批命令(mget和mset)
- 将需要执行的命令放到一个文件 cat cmd.txt | redis-cli -a 1111111 --pipe