1、redis特性

速度快:redis是内存型

持久化:redis可以持久化

数据结构:redis支持多种数据结构,string hash list set zset

多语言客户端:redis支持多种客户端语言

功能丰富:发布订阅、事务、pipeline、bitmap、geo

简单:上手简单,开源

复制:自带RDB和AOF主从复制

高可用分布式:自带的分布式

redis是单线程:纯内存,非阻塞IO,避免线程切换和静态消耗

redis使用场景:缓存系统,计数器,消息队列,排行榜,社交网络,实时系统

2、redis的启动方式

默认启动 redis-server

参数启动 redis-server -h 127.0.0.1 -p 6379

配置启动(推荐)

3、redis通用命令

通用命令:

keys * 遍历所有的key (o(n))该命令一般不在生产环境使用 scan 或者热备节点可以遍历

dbsize 计算key的总数 (o(1))

exists key 检查key是否存在 存在返回1 不存在返回 0

del key 删除指定的key

expire key seconds 设置key在seconds秒后过期

ttl key 查看key剩余的过期时间 -2 代表已经不存在 -1 代表key存在,并且没有过期时间

persist key 去掉key的过期时间

type key 返回key的类型 返回值包括:string hash list set zset none(不存在)

*

string字符串:

使用场景:缓存 计数器 分布式锁

get 获取key对应的value

set 设置key-value 不管key是否存在,都设置

del 删除key-value

incr key自增1,如果key不存在,自增后get(key)=1

decr key自减1,如果key不存在,自减后get(key)=-1

incrby key自增k,如果不存在,自增后get(key)=k

decrby key自减k,如果不存在,自减后get(key)=-k

实际使用:记录网站每个用户个人主页的访问量

incr userid:pageview(单线程,无竞争)

setnx key不存在,才设置

set key value xx key存在才设置

mget 批量获取key原子操作 一次获取的key值有限

mset 批量设置key

n次get = n次网络时间+n次命令时间

1次mget = 1次网络时间+n次命令时间

getset key newvalue set key newvalue并返回旧的value

append key value 将value追加到旧的value

strlen key 返回字符串得长度

incrbyfloat key 增加key对应的值

getrange key start end 获取字符串指定下标的所有值

setrange key index value 设置指定下标所有对应的值

hash类型

使用场景:存储个人信息,记录网站每个用户的个人主页访问量

hget key field 获取hash对应的field的value

hset key field value 设置hash key 对应的field的value

hdel key field 删除hash key 对应field的value

hexists key field 判断key是否有field

hlen key 获取hash key field的数量

hmget key field1 field2 批量获取hash key的一批field对应的值

hmset key field1 value1 field2 value2 批量设置hash key的一批field value

hgetall key 获取hash对应的key的所有field的value

hvals key 返回hash key对应所有field的value

hkeys key 返回hash key对应所有field

hsetnx key field value设置hash key对应field的value(如field已存在,则失败)

hincrby key field intCounter hash key对应field的value自增intCounter

hincrbyfloat key field floatCounter hincrby的浮点数版

list队列类型

使用场景 timeLine

rpush key value1 value2 从列表右端插入值

lpush key value1 value2 从列表左端插入值

linsert key before|after value newValue 在list指定的值前|后插入newValue

lpop key 从列表左侧弹出一个item

rpop key 从列表右侧弹出一个item

lrem key count value 根据count的值,从列表中删除所有value相等的项

count > 0 从左到右,删除最多count个value相等的项

count < 0 从右到左,删除最多Math.abs(count)个value相等的项

count = 0 删除所有value相等的项

ltrim key start end 按照索引范围修剪列表

lrange key start end (包含end) 获取列表指定索引范围的索引item

lindex key index 获取列表指定索引的item

llen key 获取列表的长度

lset key index newValue 设置列表指定索引值为newValue

blpop key timeout lpop阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞

brpop key timeout rpop阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞

*

set集合类型

使用场景:抽奖系统,like 赞 踩,标签

sadd key element 向集合key添加element(如果element已经存在,添加失败)

srem key element 将集合key中的element移除掉

scard key 计算集合大小

sismember key element 判断element是否在集合内

srandmember key 从集合中随机抽取count个元素 (不改变原集合)

smembers key 获取集合所有元素

spop key 从集合中弹出element (改变原集合)

sdiff key 差集

sinter key 交集

sunion key 并集

*

zset有序集合

使用场景:排行榜

zadd key score element(可以是多对)添加score和element

zrem key element(可以是多对) 删除元素

zscore key element 返回元素的分数

zrank key element 返回元素的排名

zincrby key increScore element 增加或减少元素的分数

zcard key 返回元素的总个数

zrange key start end 返回指定索引范围内的升序元素

zrangebyscore key minScore maxScore 返回指定分数范围内的升序元素

zcount key minScore maxScore 返回有序集合内在指定分数范围内的个数

zremrangebyrank key start end 删除指定排名内的升序元素

zremrangebyscore key minScore maxScore 删除指定分数内的升序元素

zrevrank 返回元素的排名 降序

zrevrange 返回指定分数范围内的降序元素

zrevrangebyscore 返回有序集中指定分数区间内的所有成员

zinterscore 计算一个或多个有序集的交集

zunionscore 计算一个或多个有序集的并集

4、redis的特性

慢查询

生命周期:①发送命令②排队③执行命令④返回结果

慢查询发生在第3阶段,客户端超时不一定慢查询,但慢查询是客户端超时的一个可能

slowlog-max-len 先进先出队列 固定长度 保存在内存中

slowlog-log-slower-than 慢查询阈值 slowlog-log-slower-than=0 记录所有命令 slowlog-log-slower-than < 0 不记录所有命令

修改配置文件

config get slowlog-max-len=128

config get slowlog-log-slower-than=10000

修改配置文件重启

动态配置

config set slowlog-max-len 1000

config set slowlog-log-slower-than 1000

慢查询命令:

slowlog get[n]:获取慢查询队列长度

slowlog len:获取慢查询队列长度

slowlog reset:清空慢查询队列

注意:

slowlog-max-len 不要设置过大,默认10ms,通常设置1ms

slowlog-log-slower-than不要设置过小,通常设置1000左右

理解命令生命周期

定期持久化慢查询

pipeline

网络命令通信模型:

传输命令=》返回结果

一次时间 = 一次网络时间 + 一次命令时间

批量网络命令通信模型:

n次时间 = n次网络时间 + n次命令时间

流水线:

1次pipeline(n条命令) = 1次网络时间 + n次命令时间

注意:

*redis的命名时微秒级别

pipeline每次条数要控制住*

使用建议

注意每次pipeline携带的数据量

pipeline每次只能作用在一个Redis节点上

M操作与pipeline的区别

发布订阅

发布者:publisher channel message 返回订阅者的个数

订阅者:subscriber channel 一个或多个

取消订阅:unscribe channel 一个或多个

订阅模式:psubscribe [pattern] punsubscribe channel

频道:channel

bitmap位图

使用场景:独立用户统计

setbit key offset value 给位图指定索引设置值

getbit key offset 获取位图指定索引的值

bitcount key [start end] 获取位图指定范围(从start到end,单位为字节,如果不指定就是获取全部)位值为1的个数

bitop op destkey key [key ...] 做多个Bitmap的and(交集)、or(并集)、not(非)、xor(异或)操作并将结果保存在destkey中

bitos key targetBit [start] [end] 计算位图指定范围(start到end,单位为字节,如果不指定就是获取全部)第一个偏移量对应的值等于targetBit的位置

注意

1、type=string,最大512MB

2、注意setbit时的位移量,可能有较大的耗时

3、bitmap不是绝对的好

HyperLogLog

基于HtperLogLog算法:极小的空间完成独立数据量统计,本质还是字符串

pfadd key element 向hyperloglog添加元素

pfcount key 计算hyperloglog的独立总数

pfmerge destkey sourcekey 合并多个hyperloglog数据

注意

1、是否能容忍错误(错误率0.81%)

2、是否需要单条数据

GEO地理信息

存储经纬度,计算两地距离,范围计算等

geoadd key longtitude latitude member增加地理位置信息

geopos key member [member] 获取地理位置信息

geodist key member1 member2 获取两个地理位置的距离

注意

1、since 3.2+

2、type geokey = zset

3、没有删除API:zrem key member

redis smembersmap_Redis数据类型及常用API相关推荐

  1. SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例

    场景 SpringDataRedis环境搭建(详细图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/104989029 ...

  2. Redis的数据类型及其常用命令

    快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...

  3. 【Redis】Nosql引入、Redis的数据类型和常用指令

    Redis 内容管理 NoSQL 现代互联网应用特点 RDBMS弊端 无法应对高并发 [磁盘IO瓶颈] 数据存储有限,横向扩展弱 硬件要求高 不易提高性能[解决单一架构] 单一架构解决方案 NoSQL ...

  4. Redis6发布订阅及Redis新数据类型

    Redis6 Redis的发布和订阅 什么是发布和订阅 Redis的发布和订阅 发布订阅命令行实现 Redis新数据类型 Bitmaps 常用命令 1.setbit 2.实例 3. getbit 4. ...

  5. Java Web学习day26------Redis基础、Redis数据类型、常用指令、jedis、持久化

    Redis基础.Redis数据类型.常用指令.jedis.持久化 1. Redis 简介 1.1 NoSQL概念 1.2 Redis概念 1.3 Redis 的下载与安装 1.4 Redis服务器启动 ...

  6. php中数据类型、数组排序、循环语句、混编、操作本地文件流程、常用API、函数、魔术常量

    php中数据类型: php中有7种数据类型,分别是: //1.String字符串,用引号包裹的字符,如:$str = 'hello word';//2.Integer整型,可以是正数或负数,有十进制. ...

  7. Redis五大数据类型常用命令

    Redis五大数据类型 Redis-Key 1.查看当前数据库的key keys * #返回当前数据库下的所有key 2.设置key set key value 3.获取key的value get k ...

  8. Redis 常用 API

    1.官方文档 Redis API 官方文档:http://redisdoc.com/ 2.数据库相关 API select 数据库下标 :切换数据库 Dbsize:查看当前数据库 key 的数量 Fl ...

  9. Redis(一)数据类型、常用命令

    文章目录 一.初识Redis 1.1 Redis特性 1.2 Redis的优缺点 1.2.1 Redis的优点 1.2.2 Redis的缺点 1.3 为什么要用缓存 1.4 Redis和其他容器的比较 ...

最新文章

  1. 量子计算机科学原理,1000字看懂IBM量子计算机原理
  2. SQLAlchemy 用于 MySQL创建表时的bug修正
  3. 计算机专业毕业文案,我们毕业啦!|今天,没有文案
  4. 局域网电脑间互相访问的问题?
  5. 自动点击器一秒200_做PPT还需要找模板?用这招3分钟就能自动排好PPT!
  6. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码
  7. 周末舞会(信息学奥赛一本通-T1332)
  8. json数据解析_shell从入门到放弃解析json数据(2)
  9. js基础--变量、数据类型、循环、判断、函数定义
  10. 未来的商业,一定是基于在线化的
  11. java开发之路——个人开发模板之技巧
  12. IDEA快捷键整理(最详细的)
  13. 大数据:海量数据的存储方案及其对应的高并发解决方案
  14. java keytool 工具
  15. 计算机代数与数论pdf,基础数论算法 - maTHμ - 计算机代数系统.pdf
  16. win8优化(win8优化大师设置开始界面)
  17. java获取一段话的首字母或拼音
  18. Vulnhub_Noob
  19. 众多尼龙VRay材质球素材一键即可获取
  20. 日志模块、正则表达式、时间模块

热门文章

  1. CXF 入门:创建一个基于SOAPHeader的安全验证(CXF拦截器使用)
  2. Python__random模块
  3. android HDMI 清晰度 分辨率
  4. SQL Server资源管理之内存管理篇(上)
  5. 多线程,多进程选择(了解)
  6. HttpHandler应用之 防止图片盗链
  7. AVL树平衡旋转详解
  8. Virtualization基础
  9. 微信公众平台开发教程(八)Session处理
  10. 第四篇: python函数续