一、初识Redis
1、介绍 redis
特性:
高性能(存在内存)
持久化(异步保存至磁盘中,aof和rdb两种方式)
多类型( Strings, Lists, Hashes, Sets 及 Ordered Sets || 位图、HyperLogLog、GEO..)
多功能(事务、发布订阅、排行榜、社交网络...)
多支持(遵守BSD,支持多种语言如php\java\python...)
单线程、高可用、分布式
(单线程,只能处理一个任务之后才能进行下一个命令,所以要避免长慢查询!)
2、下载安装:
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz -C /opt/
$ cd redis-5.0.5
$ make && make install
3、安装成功之后,在 src/ 下有几个可执行文件:
>>> redis-server # 启动服务
>>> redis-cli # 交互式客户端
>>> redis-beachmark # 性能
>>> redis-check-aof # AOF修复
>>> redis-check-dump # RDB检测
>>> redis-senteinel # 高可用
4、启动方式:
>>>redis-server # 普通启动
>>>redis-server --port6380 # 动态参数启动
>>>redis-server config/redis-6379.conf # 配置文件启动
5、常见配置:
[root@atong redis-5.0.5]# mkdir config
[root@atong redis-5.0.5]# cp redis.conf ./config/redis-6379.conf
[root@atong redis-5.0.5]# cd config
[root@atong config]# vim ./redis-6379.confdaemonize yes # 守护进程
port 6379 # 端口
logfile 6379.log # 日志名字
dir /opt/redis/data # 工作目录
6.验证启动
ps -ef | grep redis
netstat -anptl | grep redis
redis-cli -h 127.0.0.1 -p 6379 ping
二、命令使用基础
1.通用命令
KEYS pattern # 不建议使用,单线程阻塞
dbsize
TYPE key
EXISTS key
DEL key
flushall
EXPIRE key seconds # 设置过期时间
PERSIST key # 取消过期时间
TTL key # 查看过期时间(-1永久、-2已不存在)
2.String 字符串
- SET key value # ex 30 存在时间30秒 # px 30 存在时间30豪秒 # nx 不存在时设置 # xx 存在时设置
- MSET key value [key value ...]
- GET key
- MGET key1 key2 ...
- INCR key
- INCRBY key increment
- DECR key
- DECRBY key decrement
- STRLEN key
- GETRANGE key start end
- APPEND key value # 拼接字符串
- SETNX key value # key 不存在时设置
- SET key value XX # key 存在时设置
- SETEX key seconds value # 过期时间设为 seconds
- MSETNX key value [key value ...]
- getset # 设置值并返回旧值
- incrbyfloat #自增浮点数
2.Hash 哈希
- HSET key field value
- HMSET key field1 value1 [field2 value2 ]
- HGET key field
- HMGET key field1 [field2]
- HGETALL key
- HKEYS key
- HVALS key
- HLEN key
- HDEL key field1 [field2]
- HEXISTS key field
- HINCRBY key field increment
- HSETNX key field value# 为什么不直接字符串保存系列化的一组信息呢?这样每更新一个字段的值都需要取出全部值,较麻烦,哈希更好,更省内存,但无法设置属性的过期时间~(hash可以看作一个小的redis)
3.List 列表
- LPUSH key value1 [value2]
- RPUSH key value1 [value2]
- LRANGE key start stop
- LINSERT key BEFORE|AFTER pivot value # 在某值之前或之后插入新值
- LPOP key
- RPOP key
- LREM KEY_NAME COUNT VALUE # 移除count(<0左|>0右|0全部)个VALUE 值
- LTRIM KEY_NAME START STOP # 移除下标 (START~STOP)之外的值
- LINDEX key index # 通过索引获取列表中的元素
- LLEN key
- LSET key index value
# 应用:栈(lpush + lpop)、队列(lpush + rpop)、消息队列(lpush + brpop)
4.集合
(无序 无重复 集合间的运算)
- SADD key member1 [member2]
- SREM key member1 [member2]
- SCARD key # 获取集合的成员数
- SISMEMBER key member #判断 member 元素是否是集合 key 的成员
- SMEMBERS key # 返回集合中的所有成员(无序)
- SRANDMEMBER key [count] #返回集合中一个或多个随机数
- SPOP key # 移除并返回集合中的一个随机元素
# 集合间的运算(交 、 差 、 并)
- SDIFF key1 [key2] # 返回给定所有集合的差集
- SINTER key1 [key2] # 返回给定所有集合的交集
- SUNION key1 [key2] # 返回所有给定集合的并集
5.有序集合
ZADD key score1 member1 [score2 member2]
ZREM key member [member ...]
ZSCORE key member # 返回成员的分数值
ZINCRBY key increment member
ZCARD key
ZRANK key member #返回有序集合中指定成员的索引
ZRANGE key start stop
ZRANGEBYSCORE key min max # 通过分数返回有序集合指定区间内的成员
ZCOUNT key min max #计算在有序集合中指定区间分数的成员数
ZREMRANGEBYRANK key start stop # 移除有序集合中给定的排名区间的所有成员
ZREMRANGEBYSCORE key min max # 移除有序集合中给定的分数区间的所有成员
三、Redis 的其它功能
1.慢查询
# 慢查询的时间不包括请求、队列等时间,只算 redis 执行命令的时间
>>> 两个配置
# 阈值 slowlog-log-slower-than,默认值10000
slowlog-log-slower-than 10000 # 执行时间超过10微妙则记录日志
# slowlog-log-slower-than 0 # 1 表示记录所有命令。
# slowlog-log-slower-than -1 # 小于0,表示不记录慢查询
# 日志的条数,慢查询最大的条数,当slowlog超过设定的最大值后,会将最早的slowlog删除
slowlog-max-len 128慢查询命令
127.0.0.1:6379> slowlog get # 获取慢查询队列
127.0.0.1:6379> slowlog len # 获取慢查询长度
127.0.0.1:6379> slowlog reset # 清空慢查询队列
2.管道(pipeline)
响应时间 = 发起访问 + 处理 + 返回结果
(执行方式类似事务,开启管道,拼写语句,执行管道,以此减少网络时间)
php 例子:
$pipe = $redis->multi(Redis::PIPELINE);
for ($i=0; $i<100000; $i++){
$key = "php:user:id_".$i;
$redis->set($key,json_encode(time()));
}
$pipe->exec();
3.发布订阅
# 将信息message发送到指定的频道channel。
PUBLISH channel message
# 订阅给定的一个或多个频道的信息。
SUBSCRIBE channel [channel ...]
#订阅一个或多个符合给定模式的频道;每个模式以 * 作为匹配符。
PSUBSCRIBE pattern [pattern ...]
#指示客户端退订给定的频道,如果没有频道被指定,那么命令订阅的所有频道都会被退订。
UNSUBSCRIBE [channel [channel ...]]
#列出当前的活跃频道。活跃频道指的是那些至少有一个订阅者的频道, 订阅模式的客户端不计算在内。
PUBSUB CHANNELS [pattern]
#返回给定频道的订阅者数量, 订阅模式的客户端不计算在内。
PUBSUB NUMSUB [channel-1 ... channel-N]
#返回订阅模式的数量。这个命令返回的不是订阅模式的客户端的数量, 而是客户端订阅的所有模式的数量总和。
PUBSUB NUMPAT
4.位图(bitmap)
利用二进制特点,判断用户是否做了操作!类似php位运算符;
5.Hyperloglog
极小的空间完成数量统计;
6.geo
记录地理位置、计算位置距离、查找范围之内位置等
>>>imooc介绍: https://blog.csdn.net/weixin_37778801/article/category/8500929