笔记-Redis

简介

youtube教程
菜鸟教程
NOsql的key-value数据库

可基于内存亦可持久化

日志型数据库

遵守BSD协议,开源免费

由C语言编写

分布式的基于内存的

缓存工具

关系型数据库和非 的区别:表与表之间建立关联关系;

非~的分类:

  • key-value
    • Redis, Oracle BDB
  • 列存储数据库
  • 通常用于分布式存储的海量数据,键依然存在,但特点是 指向了多个列。这些列是由家族来安排的。如HBase
  • 文档行数据库
    • MongoDb. 比键值数据库的查询效率更高
  • 图形数据库
    • Neo4J

非~在一下情况更适用

  • 数据模型简单
  • 需要灵活性更强的IT系统
  • 对数据库性能要求较高
  • 不需要高度的数据一致性
  • 对于给定key比较容易映射复杂值的环境

关系型数据库的执行流程:

select * from usersTable

  1. 解析字符串 select ….
  2. 将字符串转换成对象
  3. 经过大量算法在硬盘中查询操作
  4. 展示在控制台

而redis这种key-value数据库直接通过key查询value

redis特点

  • 支持数据持久化,可以将内存中数据保存在磁盘,重启时可以再次加载
  • 不仅支持简单的key-value的类型,同时提供list, set,zset,hash, ordered Set等数据结构的存储
  • 支持数据备份,集群等高可用功能
  • redis的所有操作都是原子性的,要么成功执行要么失败完全不执行。多个操作也支持事务,即原子性,通过multi和exec指令包起来
  • 支持publish/subscribe,通知,key expire等
  • 单个key存入512M大小
  • 支持多种类型数据结构 string,list,hash,set,zset
  • 单线程 原子性
  • 可以持久化,因为使用了RDB和AOF机制
  • 支持集群,支持16个库
  • 可以做消息队列,比如聊天室IM

缺点

  • 耗内存,占用内存过高
  • 因为持久化,实现的两种方式:
    • 定时快照(snapshot)每次都是写全部数据,代价较高
    • 基于语句追加(aof)只追踪变化的数据,但是追加的log可能过大,同时

redis config 配置

url in youtube

常用命令

  • del key
  • Keys (pattern)
    • Keys * 星代表所有
    • keys xx? 问号表示一个字符
  • Dump key
  • Exists key: check a key is exist
  • Expire key seconds : set a key expire time,常用业务场景是:限时的优惠活动信息,网站数据缓存比如排行榜按天更新,手机验证码,网站限制访客访问频率
  • pexpire key millseconds:
  • ttl key: check key expire time, -1时永久,-2是不存在(已过期
  • Pttl key :以毫秒为单位
  • persist key : 移除key的过期时间
  • rename key newName
  • move key db
  • type key 返回key的值 的数据类型

key的命名规范

  • key不要超过1024字节
  • 一个项目中,key最好使用统一模式,例如 user:123:passwordxx
  • 命令 get /set 之类的不区分大小写,key区分大小写

数据类型

  1. string

    • 二进制数据安全,中间不用编码解码
    • 一个key对应一个value,值可以是图片的二进制序列化
    • string是redis最基本的数据类型,一个键key最多存储512M

    相关命令

    • set key xx,
    • setnx key xx,只有key不存在的情况下设置key值,否则无效
    • get key,如果key 不存在返回nil,如果key值存储的不是字符串类型,比如hash 就会返回一个错误
    • getrange key startIndex endIndex, 根据下标截取字符串
    • getset key xx,如果key存在就返回key旧值并赋值xx,如果key不存在就返回nil并赋值xx
    • strlen key
    • Del key
    • incr key,将key中存储的数字值增加1.如果key不存在就被初始化为0并创建然后执行incr操作(即最初是1)
    • decr key ,自减
    • incrby key count,同上,将key中存储的数字值增加count量
    • decrby key count

    应用场景:

    1. 通常用于保存单个字符串或者json字符串数据
    2. string是二进制安全的,所以完全可以把图片文件的内容作为字符串来存储,保密性的图片
    3. 计数器,如微博数 粉丝数,incr等命令本身就具有原子操作的特性
  2. hash

    • 类似于object

    相关命令

    • hset key field field-value
    • hget key field
    • hmset key field1 field-value1 [field2 field-value2..]. 一次性赋值整个hash多个fields
    • hmget key field1 [field2 …]
    • hgetall key 返回key的整个hash值
    • hkeys key 获取key的hash值中的所有fieldkey
    • hlen key 获取hash表中字段fields的数量
    • hdel key field1 [field2 …] 删除一个或多个hash字段,当所有字段都删除了就自动回收掉这个key
    • del key
    • hsetnx key field value 同setnx
    • hincrby key field count 同incrby 对hash值中的某个field自增
    • hincrbyfloat key field count 对hash值的中某个field值为浮点数值加
    • hexists key field 查看hash值中指定字段field是否存在

    应用场景

    存储一个对象

    hash是最接近关系型数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中

  3. list列表

  4. set集合

  5. zset有序集合


   转载规则


《笔记-Redis》 Ryan Who 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录