乐趣区

关于redis:Redis入门

历史倒退

MySQL 单机演变

单机读写压力,次要是读压力,所以须要多台服务器。

当今企业架构

数据服务也是以集群模式存在

NoSQL

键值

文档

社交、搜寻

列数据

阿里巴巴的架构演进

Redis 简介

key-value 存储系统,非关系型数据库,由 ANSI C (动静 C 语言)编写。

特点

装置 Redis

ubuntu18.04 装置

间接参照菜鸟教程即可

Redis 下的配置文件 redis.conf

在启动时须要应用命令 redis-server xxx.conf
xxx.conf 就是咱们的配置文件,前面尝试主从复制时须要复制一份 原文件 (单机伪集群)
我将这个文件放在了 /usr/local/bin 目录下
通过 nstat -ntlp|grep 6379 来查看端口号
通过 ps -f|grep redis

性能测试 redis-benchmark

redis-benchmark -n 10000 -q

近程连贯

redis-cli -h host -p port -a password

Redis 数据类型

抉择数据库

默认有 16 个数据库,select index

查看以后数据库大小

dbsize

分明以后数据库

清空以后数据库 flushdb| 清空所有数据库 flushall

查看是否存在

EXIST key

查看所有键

key *

删除 key

del key1

设置生效工夫

expire key 10

查看以后 key 的剩余时间

ttl key

查看指定 key 的类型

type key

String

应用场景

  1. 计数器
  2. 统计多单位的数量
  3. 粉丝数
  4. 对象缓存存储

    设置值

    set k1 v1

    取得值

    get k1

    追加字符串

    append k1 hello 如果不存在就相当于 set

    获取字符串长度

    strlen k1

    自增和自减

    incr views|decr views

    设置步长自增自减

    incrby views 10| decrby views 10

    截取字符串

    getrang k1 0 3(获取字符串 [0,3] 的元素)

    替换指定地位开始的字符串

    setrange k1 1 xxx(下标从 0 开始,同时前面的字符不会被替换)

    设置过期工夫(set with expire)

    setex k3 30 hello

    不存在在设置(set if not exist), 分布式锁常常会用到

    setnx mykey mongodb

    批量设置多个值(mulit set)

    mset k1 v1 k2 v2

    批量获取多个值

    mget k1 k2

    批量设置原子操作(并发中的状况)

    msetnx k1 v1 k4 v4

    设置对象

    set user:1{name: 张三,age:13}
    采纳的是 user:{id}:{field}

    getset 先获取再存储

    如果存在则返回原来的值并且设置新的值

    List

    能够将 List 用作栈、队列、阻塞队列

    lpush 增加一个或者多个值

    lpush list one
    lpush list two

    rpush 从左边插入

    lrange 获取区间的值

    lrange 0 -1 获取所有的值
    lrange 0 3 指定区间

    lpop 移出 list 的第一个元素

    lpop list

    rpop 从左边移出 list 的最初一个元素

    lindex list 依据下标获取元素

    lindex list 0

    llen list 获取长度

    lrem 删除指定个数的 value

    lrem list 1 one

    ltrim 截取指定长度的元素

    ltrim list 1 2 通过下标截取指定的长度, 只剩下截取的元素

    rpoplpush list1 list2 移除列表的最初一个元素,将他挪动到新的列表中

    lset 更新 list 当中存在的元素

    list list 0 item 依据下标来更新

    insert list before b xxx 指定地位插入

    Set

    增加元素

    sadd myset …

    查看汇合中元素 smembers

    查看是否存在某个元素 smember myset hello

    查看个数

    scard myset

    随机获取汇合中的元素

    sranmember myset 1

    随机删除汇合中的元素

    spop myset 1

    挪动指定元素

    smove myset myset1 a

    差集 / 交加 / 并集 SDIFF/SINTER/SUNION

    zset(sorted set)

    增加元素

    zadd myset 1 one 2 two 3 three

    获取所有元素

    zrange myset 0 -1

    排序

    zrevrangebyscore key max in withscores limit offset count

    从大到小

    zrevrangebyscore salary +inf -inf # zrevrangebyscore

    显示全副用户并且附带问题

    zrevrangebyscore salary +inf -inf withscores

    升 / 降序

    zrange myzset 0 -1/zrevrange myset 0 -1

    获取指定区间元素个数

    zcount myzset 1 4

    哈希(Hash)

    设置字段值

    hset myhash field2 value2

    设置多个字段值

    hmset myhash field2 value2 field3 value3

    获取多个指定的字段值

    hmget myhash field1 field2

    获取全副的值

    hgetall myhash

    删除指定的键

    hdel myhash field1

    获取键值对的个数

    hlen myhash

    判断 hash 中指定字段是否存在

    hexists myhash field1

    获取所有的 key/value

    hkeys/hvals

    3 种非凡的数据结构

    geospatial 地理位置

    Hyperloger 基数统计

    基数在有穷集中就是个数,来源于无穷集 (知乎)。
    用处: 网站的 UV

    Bitmaps 位存储

    用处: 统计用户信息,沉闷 / 不沉闷等。实质上就是以二进制 0 和 1 来进行判断。

    事务

    Redis 没有事务的隔离级别这个概念。Redis 单条命令是原子性的然而事务并不是原子性的。

    开启与执行

    multi 开启
    set …
    exec 执行

    开启与勾销

    multi 开启
    set …
    discard 勾销
    编译型异样 (代码自身有问题) 事务不会执行
    运行时异样 异样的这一行不会执行,其余的照常执行

    Redis 实现乐观锁

    乐观锁

  5. 认为什么时候都不会有问题, 更新数据的时候去判断一下, 在此期间是否有人批改过这个数据
  6. 获取 version
  7. 更新的时候比拟 version

    乐观锁

    redis.conf 配置

    根本配置

    快照配置

    主从配置

    长久化操作

    RDB(Redis Database)

    触发机制

    save 时触发 rdb 规定
    flushall 触发 rdb 规定
    退出 redis 触发 rdb 规定
    备份的快照 dump.rdb
    复原时只须要将备份放在 redis 的启动目录下就能够

退出移动版