利器之reids

目录

 

 

redis类型和对应的骚命令

redis的另外一些骚操作

 

redis的持久化


 

redis类型和对应的骚命令

  • string,带S的都是o(n)级的命令

  1. mget,mset:可以执行批量命令操作,可以大大解决网络开销(每次命令都是一次网络请求,放在一起就变成一次了)S

  2. getset :设置新的值返回老得值  

  3. append key value :把value追加旧值后面

    扫描二维码关注公众号,回复: 3190768 查看本文章
  4. strlen key : 返回你值的长度,注意中文值是占用2个字节(UTF-8),所以你要除2才能得出长度 

  5. incrbyfloat key value :浮点数的递增,但是没有递减,可以传个负数来达到递减的目的

  6. getrange key 0 2 :获取索引范围内的key

  7. setrange key 3 value :替换索引对应的值

  8. incr ,decr :增1减1 

  • hash
  1. 可以想象他是mapmap结构,一个key里面放着类似map一样的健值对,可以单独的对他的value进行单独更新
  2. hget key field :获取hash key对应的field(列)的value
  3. hset key field value :设置hash key对应field的value
  4. hdel key field :删除hash key对应field的value
  5. hexists key field :判断hash key是否有field
  6. hlen key :获取hash key field的数量
  7. hmset,hmget:批量操作同理
  8. hgetall key :返回hash key对应所有的field和value  S
  9. hvals key : 返回hash key对应所有的field的value  S
  10. hkeys key :返回hash key 对应所有field  S
  11. hsetnx key field value :同理
  12. hincrby key field intcounter :对应的列进行自增
  13. hincrbyfloat key field floatCounter :浮点数版本
  14. 和string比的优缺点,更直观,减小内存,达到要求会进行自动压缩数据,单独更新列避免程序内外反复的json序列化的开销,会造成编程复杂,只能控制key的失效时间,并不能精确到列
  • list
  1. rpush key value..... :从列表右端插入值
  2. lpush key value.....: 送列表左端插入值
  3. linsert key before|after value newvalue:在list指定的值前|后插入newvalue S
  4. lpop :从左边弹出一个key
  5. rpop:从右边弹出一个key
  6. lrem key count value :根据count值,从列表中删除所有value相等的项 S
  7. ltrim :保留索引范围内的数据 S
  8. lrange key start end :获取列表指定索引范围所有值包含end S
  9. lindex key index :获取列表指定索引的item S
  10. llen key :获取列表的长度
  11. lset key index newvalue :设置列表指定索引值为newvalue S
  12. blpop key timeout :从左端等待队列返回值,timeout=0时候就死等
  13. brpop key timeout : 右侧版本
  • set
  1. 无序且没有重复的支持集合间的操作
  2. sadd key element :向集合key添加element(如果存在,添加失败)
  3. srem key element :将集合key中的element移除掉
  4. scard :集合大小
  5. sismember :返回是否存在该元素
  6. srandmember key count:随意返回count个元素,不会减少集合数据
  7. smembers :返回所有元素
  8. spop key :从集合中随意弹出一个元素,会减少集合数据
  9. sdiff key key1:差集
  10. sinter key key1 :交集
  11. sunion key key1 :并集
  12. sdiff|sinter|suion + store destkey:将三种集结果保存在destkey中
  • 有序set
  1. 有序且无重复元素,集合中element+score二个值,通过score来进行排序,有些命令时间复杂度很高,常用于排行榜
  2. zadd key score element :新增一个元素,分数score可以重复,element(值)不可以重复  o(log(n))
  3. zrem key element:删除元素,element可以是多个
  4. zscore key element :返回元素的分数
  5. zincrby key increscore element :增加或减少increscore个分数,传负数实现减少
  6. zcard key: 返回集合的长度
  7. zrange key start end [withscores] :返回指定索引范围内的升序元素,可选参数是否打印分值 o(log(n)+m)
  8. zrangebyscore key minscore maxscorep[withscores] :返回指定分数范围内的升序元素 o(log(n)+m)
  9. zcount key minscore maxscore :返回有序集合内在指定分数范围内的个数 o(log(n)+m)
  10. zremrangebyrank key start end : 删除指定排名内的升序元素
  11. zremrangebyscore key minscore maxscore :删除指定分数内的升序元素 o(log(n)+m)
  12. zrevarnk :获取指定元素的排名 从低到高
  13. zrevrange :同理,从高到低的排名
  14. zrevrangebyscore :通过分数获取从高到低的排名
  15. zinterstore,zunionstore:交集并集的计算

redis的另外一些骚操作

  • 慢查询
  1. 慢查询会记录在一个大小固定的队列中
查询默认值的命令:
config get slowlog-max-len//队列长度为128
config get slowlog-log-slower-than //10000,超过10秒的会被记录

动态设置其大小的命令:
config set slowlog-max-len 1000 //常用长度
config set slowlog-log-slower-than 1000 //常用超时时间

慢查询命令
slowlog get[n]:获取慢查询队列N条
slowlog len : 获取慢查询队列的长度

slowlog reset :清空慢查询队列
  • 流水线pipeline
  1. 把命令打包执行,解决每次网络请求的消耗,redis本身命令都是微秒级别的。
  2. 和mget,mset对比:pipelin是非原子的,执行的时候还是可能会被打乱分批执行,而mset是原子的,执行的时候就一个命令
  3. 注意每次pipeline携带的数据量
  4. pipeline每次只能作用在一个redis节点上

  • 发布订阅
  1. publish channel message : channel为频道名,message 信息,发布消息,命令返回多个个订阅者
  2. subscribe[channel] :订阅频道 channel可以是一个或多个
  3. unsubscribe[channel] :取消订阅频道
  4. psubscribe[pattern....]:订阅模式,通过通配符来订阅多个频道
  5. punsubscribe[pattern.....]:退订指定的模式
  6. pubsub channels :列出至少有一个订阅者的频道
  7. pubsub numsub[channel....]:列出给定频道的订阅者数量
  8. 发布订阅和消息队列的区别:发布订阅是所有用户都能收到,而消息队列是所有用户只有一个用户收到,抢;
  • 位图Bitmap
  1. 以极小的内存来统计网站访问次数等统计业务
  • hyperloglog
  1. 极小的内存来进行独立总数统计
  2. pfadd key element [element....]:向hyperloglog添加元素 不会添加重复的element
  3. pfcount key [key.....]:计算hyperloglog的独立总数 
  4. pfmerge destkey sourcekey[sourcekey.....]:合并多个hyperloglog
  5. 有容错率,为0.81%
  6. 无法取出单条数据
  • GEO(3.2+版本)
  1. 用于通过经纬度来计算范围和距离
  2. geoadd cities:locations 116.28 39.55 bejing :新增方法
  3. geopos cities:locations bejing :获取地理位置信息
  4. geodist cities:locations tianjing bejing km :获取二个地理位置的距离,km千米,m米,mi英里,ft尺
  5. georadius :通过纬度可以计算范围
  6. 归属于有序集,可以使用有序集的删除key操作来删除一个位置

 

redis的持久化

  • 异步的保存在硬盘之中
  • 二种方式:
  • 快照(RDB)
  1. 使用save命令直接生成RDB文件(二进制),同步命令故会阻塞整个redis。新的替换老得文件
  2. 使用bgsave命令异步生成RDB文件,通过fork()函数创建一个子进程来写文件,通常fork()函数都执行的比较快的,如果很慢也会阻塞一会,相比上面的命令这个会消耗内存
  3. 自动版(redis默认),通过生成策略来触发bgsave命令,可去配置文件查看(save 900 1:900秒变动一次)
一些配置文件参数
save 900 1 :900秒一次数据变动就会触发持久化操作
dbfilename dump.rdb :持久化文件的名称
dir ./ :文件存放的目录
stop-writes-on-bgsave-error yes :出现错误是否停止持久化
rdbcompression yes :是否采用压缩格式
rdbchecksum yes :是否对文件进行校验
最佳配置:
关闭自动持久化
dbfilename dump-${port}.rdb :用端口进行区分,因为redis是单核的单线程的,服务器部署多个redis可以方便利用多核优势
  • 写日志(AOF)
  • RDB耗时耗性能,出现宕机容易丢失数据。aof把命令刷新到缓冲区,然后通过下面三种策略来写到AOF日志文件中
  1. always:每条命令都写进去,不会丢失数据,但是IO开销很大,一般非固态的磁盘只有几百的TPS
  2. everysec(默认值):每秒写入到日志中,数据量高的时候适当的保护硬盘,会丢失一秒的数据
  3. no:由操作系统决定什么时候写入,不可控
  • AOF重写:通过优化过期命令,多个命令合成来降低文件大小,提高恢复速度
  1. bgrewriteaof命令:通过fork子进程来重写AODF
  2. AOF重写配置参数
配置:
auto-aof-rewrite-min-size :aof文件重写需要的尺寸
auto-aof-rewrite-percentage :aof文件的增长率
统计:
aof_current_size :aof当前尺寸(单位,字节)
aof_base_size : aof上次启动和重写的尺寸(单位,字节)

触发重写触发时机:
当前尺寸大于最小尺寸
当前尺寸减去上一次重写的尺寸/上一次重写尺寸得到的就是增长率 大于配置的增长率

confg文件配置:
appendonly yes :打开重写
appendfilename :名称
appendfsync  :刷新的策略

猜你喜欢

转载自blog.csdn.net/qq_35035078/article/details/82626059
今日推荐