Loading

Redis-基础

明确一个概念
NoSQL = Not Only SQL

Redis设计原则

聚合模型

  • KV键值
  • Bson (Binary Json)
  • 列族
  • 图形

CAP+BASE

CAP

C:Consistency (强一致性)
A:Availability (可用性)
P:Partition tolerance (分区容错性)

CAP只能够3进2

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据CAP原理将NoSQL数据库分成满足CA原则、满足CP原则和满足AP原则三大类:

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不大太强大
  • CP - 满足一致性,必须为分区容忍性的系统,通常性能不是特别高
  • AP - 满足可用性,分区容忍性的系统,通常可能对一一致性要求低点

CA 传统关系型数据库
AP 大多数网站架构,保障可用
CP Redis、Mongodb


分区容错性是NoSQL分布式系统必须实现的

BASE

BASE就是为了解决关系数据库强一致性引起的问题而引出的可用性降低而提出的解决方案。

BASE其实是三个术语的缩写:

  • 基本可用 (Basically Available)
  • 软状态 (Soft state)
  • 最终一致 (Eventually consistent)

主要思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。

Redis基础

基础点

  • 单进程
  • 默认16个分片 select命令切换
  • flushdb:清空当前分片
  • flushall:清空全部分片

数据类型

String(字符串)

String类型是二进制安全的。
一个redis中字符串value最多512M

Hash(哈希)

Redis hash是一个键值对集合
Redis hash是一个String类型field和value的映射表,hash特别适合用于存储对象

List(列表)

Redis列表是简单的字符串列表,左右都可以插入,按照插入顺序排序。
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全部移除,对应的键也移除;
继承链表特性头尾效率很高,中间稀碎;

Set(集合)

无序,无重复

Zset(有序集合)

Redis zset和set一样也是String类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis通过分数对成员排序

数据类型

  • 键(key)

    • key * 所有key列表,支持ant风格
    • exist key 判断key是否存在
    • move key db 移动key到指定db
    • expire key 单位秒 为给定key设置过期时间(从内存移除)
    • ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
    • type key 查看key类型
  • 字符串(String)

    • set/get/del/append(拼接)/strlen(获取value长度)

    • incr(递增1)/decr(递减1)/incrby(相加)/decrby(相减) 必须为数字才能加减

    • getrange/setrange

      • getrange 获取指定区间范围内的值,类似于betweeb...and,从0到-1表示全部
      127.0.0.1:6379> GETRANGE k1 0 -1
      "123456"
      127.0.0.1:6379> GETRANGE k1 0 3 
      "1234"
      
      • setrange 范围内设值
      127.0.0.1:6379> GET k1 123
      "1"
      127.0.0.1:6379> SETRANGE k1 0 000 
      (integer)7
      127.0.0.1:6379> GET k1
      "000123"
      
    • setex(set with expire)键秒值/setnx(set if not exist)

    • mset/mget/msetnx (more get/set)

  • 列表(List)

    • lpush/rpush/lrange
    • lpop(左出栈)/rpop(右出栈)
    • lindex 按照索引下标获得元素(从上到下)
    • lrem k n v 删除N个value
    • ltrim key 开始index 结束index 截取指定范围的值后再赋值给key
    • rpoplpush 源列表 目标列表
    • lset key index value
    • linsert key before/after 值1 值2
  • 集合(Set)

    • sdd/smembers/sismember
    • scard 获取集合里面的元素个数
    • srem key value 删除集合中元素
    • srandmember key n 随意出n个数字
    • spop key 随机出栈
    • smove key1 key2 key1中的某个值 作用是将key1里的某个值赋给key2
    • 数学集合类
      • 差集 sdiff
      • 交集 sinter
      • 并集 sunion
  • 哈希(Hash)

    KV模式不变,但V是一个键值对

    • hset/hget/hmset/hmget/hgetall/hdel
    • hlen
    • hexusts key field 判断是否存在
    • hkeys/hvals
    • hincrby/hincrbyfloat 加
    • hsetnx
  • 有序集合(Zset)

    在set的基础上增加了score值,Zset根据score排序

    • zdd/zrange
    • zrangebyscore key 开始score 结束score
    • zcard(统计数量)/zcount key score区间 (区间score中元素个数)/zrank key value (获取下标) /zscore key value (获取score)
    • zrevrank key value 逆序获得下标值
    • zrevrange
    • zrevrangebyscore key

redis.conf

  • tcp-backlog
    设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列+已完成三次握手队列。
    在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意linux内核会将这个值减少到/proc/sys/net/core/somaxconn的值,所以需要确认增加somaxconn和tcp_max_syn_backlog两个值来达到想要的效果

  • Maxmemory-policy 过期策略

    • Volatile-lru -> lru(最近最少使用) 使用LRU算法移除key,只对设置了过期时间的键
    • Allkeys-lru -> 使用LRU算法移除key
    • Volatile-random -> 在过期集合中移除随机的key,只对设置了过期的键
    • Allkeys-random -> 移除随机的key
    • Volatile-ttl -> ttl(time to leave) 移除那些ttl值最小的key,即那些最近要过期的key
    • Noeviction -> 不进行移除。针对写操作,只是返回错误信息
  • SNAPSHOTTING 快照

    • save <seconds> <changes>
      默认:
      save 900 1
      save 300 10
      save 60 10000

    • stop-writes-on-bgsave-error
      当保存出错时停止写入操作

    • rdbcompression
      压缩 redis采用LZF算法进行压缩

    • rdbchecksum
      在存储快照后,还可以让redis使用CRC64算法进行数据校验,但这样会增大约10%性能消耗。

    • dbfilename
      快照文件名

    • dir
      文件目录(config get dir 可以获取)

posted @ 2021-08-28 12:20  Vic呼叫89  阅读(47)  评论(0)    收藏  举报