• redis


    • Redis是一个key-value的nosql产品,与Memcached有些类似,但它存储的value类型相对更加丰富,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hasg。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把内存中的数据写入到硬盘(被称为数据持久化),同时由于redis支持的value类型众多,也被称为结构化的nosql数据库。
    • NoSQL产品:redis、memcache、mongoDB等特点
      • 一般不使用严格的表结构(行和列的组合形成一个表)
      • 数据的查询一般都不再使用sql查询
    • 在Mac的安装Redis
      • 官网下载https://redis.io/download
      • 将解压后的文件放入/usr/local/控制台
        • 进入文件夹:cd /usr/local/redis-5.0.4
        • 编译测试:sudo make test
        • 编译安装:sudo make install
        • 启动redis:redis-server
        • 关闭redis:redis-cli shutdown
        • 启动客户端:redis-cli
        • 关闭客户端:quit
        • 在客户端里清屏:clear
    • Redis的string类型
      • 简单例子
        127.0.0.1:6379> set username admin
        OK
        127.0.0.1:6379> get username
        "admin"
        127.0.0.1:6379> 
      • incr属性,会向指定key值自增1
        127.0.0.1:6379> set id 1
        OK
        127.0.0.1:6379> get id
        "1"
        127.0.0.1:6379> incr id
        (integer) 2
        127.0.0.1:6379> get id
        "2"
      • decr属性,会向指定key值自减1
        127.0.0.1:6379> set id 1
        OK
        127.0.0.1:6379> get id
        "1"
        127.0.0.1:6379> incr id
        (integer) 2
        127.0.0.1:6379> get id
        "2"
        127.0.0.1:6379> decr id
        (integer) 1
        127.0.0.1:6379> 
      • incrby属性,会向指定key值自增指定数
        127.0.0.1:6379> get id
        "1"
        127.0.0.1:6379> incrby id 19
        (integer) 20
        127.0.0.1:6379> get id
      • decrby属性,会向指定key值自减指定数
        127.0.0.1:6379> get id
        "20"
        127.0.0.1:6379> decrby id 19
        (integer) 1
        127.0.0.1:6379> get id
        "1"
      • keys属性,获取redis全部的key
        127.0.0.1:6379> keys * 
        1) "username"
        2) "id"
      • key如何设置
        127.0.0.1:6379> set user:id:1:username admin
        OK
        127.0.0.1:6379> set user:id:1:password admin
        OK
        127.0.0.1:6379> set user:id:1:phone 131xx1212
        OK
        127.0.0.1:6379> set user:id:1:email 3xx@qq.com
        OK
        127.0.0.1:6379> set user:id:1:register_time 2019-01-02 
        OK
        127.0.0.1:6379> set user:id:1:root 0
        OK
      • key如何查看
        127.0.0.1:6379> keys user:id:1*
        1) "user:id:1:password"
        2) "user:id:1:username"
        127.0.0.1:6379> get user:id:1:username
        "admin"
    • Redis的hash类型
      • 简单例子
        127.0.0.1:6379> hset user username admin
        (integer) 1
        127.0.0.1:6379> hget user username
        "admin"
      • 设置及获取多个hash值
        127.0.0.1:6379> hmset user password admin phone 13xxx email 3xx@qq.com
        OK
        127.0.0.1:6379> hgetall user
        1) "username"
        2) "admin"
        3) "password"
        4) "admin"
        5) "phone"
        6) "13xxx
        7) "email"
        8) "3xx@qq.com"
    • Redis的list类型
      • lpush属性,向链表的头部放入数据
        127.0.0.1:6379> lpush link1 A
        (integer) 1
        127.0.0.1:6379> lpush link1 B
        (integer) 2
        127.0.0.1:6379> lpush link1 C
        (integer) 3
        127.0.0.1:6379> 
      • rpush属性,向链表的尾部放入数据
        127.0.0.1:6379> lpush link1 A
        (integer) 1
        127.0.0.1:6379> lpush link1 B
        (integer) 2
        127.0.0.1:6379> lpush link1 C
        (integer) 3
        127.0.0.1:6379> keys link1
      • lpop属性,移除头元素
        127.0.0.1:6379> lrange link1 0 -1
        1) "C"
        2) "B"
        3) "A"
        127.0.0.1:6379> loop link1
        (error) ERR unknown command `loop`, with args beginning with: `link1`, 
        127.0.0.1:6379> lpop link1
        "C"
        127.0.0.1:6379> lrange link1 0 -1
        1) "B"
        2) "A"
        127.0.0.1:6379> 
      • rpop属性,移除尾元素
        127.0.0.1:6379> lrange link1 0 -1
        1) "B"
        2) "A"
        127.0.0.1:6379> rpop link1
        "A"
        127.0.0.1:6379> lrange link1 0 -1
        1) "B"
      • 使用场景
        • 后台统计最近登录的10个用户
    • Redis的set类型
      • set类型被称为集合类型
      • 集合是数学里面常见的一个概念,可以理解是一类数据的集合
      • 特点
        • 无序性:集合里面的数据是没有顺序之分
        • 唯一性:集合里面的数据彼此是不能重复
        • 确定性:集合里面的数据的个数是确定
      • 集合常见运算
        • 集合A(1,2)、集合B(2,3)
        • 交集:集合公共的部分;例如上面集合A和集合B的交集是2
        • 并集:集合全部的部分;例如上面集合A和集合B的并集是1,2,3
        • 差集:A-B代表的含义是元素在A里面出现,但是不能在B里面出现,例如上面集合A-集合B结果是1  
      • sadd属性,向集合里面添加元素
        127.0.0.1:6379> sadd set1 1
        (integer) 1
        127.0.0.1:6379> sadd set1 2
        (integer) 1
        127.0.0.1:6379> sadd set1 3
        (integer) 1
      • smenbers属性,获取集合里面的元素
        127.0.0.1:6379> smembers set1
        1) "1"
        2) "2"
        3) "3"
      • srem属性,移除指定元素
        127.0.0.1:6379> smembers set1
        1) "1"
        2) "2"
        3) "3"
        127.0.0.1:6379> srem set1 2
        (integer) 1
        127.0.0.1:6379> smembers set1
        1) "1"
        2) "3"
        127.0.0.1:6379> 
      • spop属性,随机的弹出集合里面的某个元素
        127.0.0.1:6379> spop set1
        "3"
        127.0.0.1:6379> spop set1
        "1"
      • sinter属性,交集
      • sunion属性,并集
      • sdiff属性,差集
      • 应用场景:好友关系展示,例如好友推荐、共同好友
    • Redis的zset类型
      • zset类型被称为有序集合,
      • 需要给集合里面的每个元素一个排序的权重。例如:按照1-9或者a-z排序
      • zadd:添加元素
        127.0.0.1:6379> zadd class:phpRank 5 mark
        (integer) 1
      • arange:获取集合元素
        127.0.0.1:6379> zrange class:phpRank 0 -1
        1) "mark"
      • withscores:获取集合内容的时候,显示权重信息
        127.0.0.1:6379> zrange class:phpRank 0 -1 withscores
        1) "mark"
        2) "5"
      • redis安全认证
        • 设置redis密码,启动redis认证
          127.0.0.1:6379> config set requirepass "root"
        • 验证redis认证
          127.0.0.1:6379> auto "root"
      • redis的持久化功能
        • redis为了本身数据的安全和完整性,会把内存中的数据按照一定的方法同步到电脑的磁盘上面,这个过程被称为持久化操作。下次再次启动redis服务的时候,会把磁盘上面的数据重新的加载到内存里面
      • 常见的持久化方式
        • 基于快照的方式:redis会按照一定的周期把内存里面的数据同步到磁盘文件里面
          • 127.0.0.1:6379> save 900 1 
            • 含义:如果在900s内,对redis的key进行过一次操作,则会把内存里面的数据同步到磁盘文件
          • 127.0.0.1:6379> save 300 10  
            • 含义:如果在300s内,对redis的key进行过十次操作,则会把内存里面的数据同步到磁盘文件
          • 127.0.0.1:6379> save 60 10000 
            • 含义:如果在60s内,对redis的key进行过一万次次操作,则会把内存里面的数据同步到磁盘文件
          • 手工的出发基于快照的持久化操作
            127.0.0.1:6379> bgsave 
          • 保存到磁盘上到哪一个文件
            #基于快照持久化保存到文件的名称
            dbfilename dump.rdb
            
            # The working directory.
            #
            # The DB will be written inside this directory, with the filename specified
            # above using the 'dbfilename' configuration directive.
            #
            # The Append Only File will also be created inside this directory.
            #
            # Note that you must specify a directory here, not a file name.
            # 保存到目录,默认是相对于启动文件redis-server的位置
            dir ./
        • 基于日志文件的追加:redis会把对redis数据造成更改的命令记录到日志文件里面,然后再一次重启的时候,执行一下日志文件里面对redis写的操作,达到数据的还原
          • 编辑内容

            #开启基于文件追加方式的持久化操作
            appendonly yes
            
            # The name of the append only file (default: "appendonly.aof")
            
            #文件的名称
            appendfilename "appendonly.aof"
          • 备份文件的周期
            # 只要存在对redis数据造成更改的操作,都要记录到磁盘文件上
            # appendfsync always
            # 每1s中进行一次把对redis数据造成更改的操作,都记录到磁盘文件上
            appendfsync everysec
            # 完全交给操作系统来完成,意思就是操作系统不繁忙的时候会把对redis进行数据造成更改的操作,都记录到磁盘文件上,这种操作最不可靠
            # appendfsync no
  • 相关阅读:
    机器学习python实战----决策树
    机器学习python实战----手写数字识别
    机器学习python实战----k近邻算法
    斯坦福2014机器学习笔记八----机器学习系统的设计
    斯坦福2014机器学习笔记七----应用机器学习的建议
    斯坦福2014机器学习笔记六----神经网络(二)
    Global Game Jam 2019 深圳站 个人总结
    加法乘法线段树模板
    线段树模板题
    单调栈和单调队列入门
  • 原文地址:https://www.cnblogs.com/fatRabbit-/p/10633996.html
Copyright © 2020-2023  润新知