zoukankan      html  css  js  c++  java
  • redis基础

    一、redis服务安装

    windows 启动临时服务   ,切换到安装目录

    redis-server.exe  redis.windows.conf

    1.redis  启动,在哪个文件夹下启动   dump.rdb就会保存到哪个文件下     建议每次启动都从一个文件夹

    ctrl+c退出

    2.精灵进程(守护进程)是为其他进程提供服务的,都是通知操作系统启动的进程

    启动精灵进程

    /user/local/redis-server redis.conf

    redis.conf

    requirepass   设置密码

    auth "密码"

    3.默认端口6379

    linux安装

    在安装redis之前先安装gcc,不然后续make的时候会报错。yum -y install gcc-c++

    tar xzf redis-5.0.0.tar.gz

    cd redis-5.0.0

    make

    后台服务

    在redis-5.0.0目录下新建etc和bin文件夹

    [root@VM_0_4_centos src]# cp ../redis.conf /usr/local/redis-5.0.0/etc

    [root@VM_0_4_centos src]# cp redis-cli redis-server mkreleasehdr.sh redis-check-aof redis-check-rdb

    redis-benchmark /usr/local/redis-5.0.0/bin

    修改/usr/local/redis-5.0.0/etc/redis.conf配置文件,命令 vim redis.conf,将后台启动打开,即将daemonize选项由no置为yes

     /usr/local/redis-5.0.0/bin目录,执行./redis-server ../etc/redis.conf脚本文件:

    ./redis-cli

    redis-cli shutdown

    二、redis数据结构

    1、字符串类型

    value 数据是一个字符串,底层保存的都是二进制数据,可以是  图片,音频,视频,最大 512M

    新增

    set key value   

    如果键存在会覆盖原来的值

    set key value nx|xx

    nx 不存在key时才执行 

    xx 存在key时才执行

    成功返回 ok 失败返回nil

    setex key seconds value

    get  key

    mset key value key value   设置多个字符串值

    mget key1 key2 key3

    getset key value 设置新值返回旧值,更新

    append key value 字符串追加,返回字符串的长度

    常用习惯

    mset user::name "张三" user::age 20   用::代表级别

     redis中不能存在相同的key

    mset user::id:name  user::id:age

    getset  a 4

    append a "1212"    在key为a的值后追加

    incr key 递增

    decr key 递减

    递增和递减必须是数字

    2、hash 散列类型(常用类型)  类似于map 适合存储对象,比string类型占用更少的空间

    hset myname field1 value

    hget myname field1

    myname 相当于集合名字, field1 字段名 value字段值

    也可以同时设置多个值

    hmset myname sex nan addr beijing

    hmget

    hkeys 返回hash里所有的字段

    hvals 返回hash的所有value

    hgetall 返回hash里所有的key和value

    3、List  类似 queue 双向链表 ,可以做栈,也可以作为队列,可重复,可作为消息队列

    lpush key value

    从头部加入元素,先进后出(栈)

    rpush key value

    从尾部加入元素,先进先出(队列)

    lrange key 0 -1  获取list中的元素插入元素

    linsert list1 before 集合的元素 插入的元素

    lpop list1  从list的头部删除元素,并返回删除元素

    rpop list1 从list的尾部删除元素,并返回删除元素

    lindex list1 1  返回索引为1的元素

    llen list 返回list的长度

    Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

    一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

    实例

    redis 127.0.0.1:6379> LPUSH runoobkey redis
    (integer) 1
    redis 127.0.0.1:6379> LPUSH runoobkey mongodb
    (integer) 2
    redis 127.0.0.1:6379> LPUSH runoobkey mysql
    (integer) 3
    redis 127.0.0.1:6379> LRANGE runoobkey 0 10
    
    1) "mysql"
    2) "mongodb"
    3) "redis"

    4、set和zset  类似 list  可用于取交集,并集,差集

    Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

    Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

    集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

    set 无序不可重复

    sadd key value value1 value2

    srem 删除

    zset 有序,索引从1开始,可应用于搜索排行,例如每隔多长时间排一次序

    zadd key 序号 value

    zrange key 0 -1

    zrank 返回排序索引,从小到大

    zrevrank 返回排序索引,从大到小

    排行 rank

    Redis 有序集合(sorted set)

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    有序集合的成员是唯一的,但分数(score)却可以重复。

    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

    实例

    redis 127.0.0.1:6379> ZADD runoobkey 1 redis
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
    (integer) 0
    redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
    (integer) 0
    redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES
    
    1) "redis"
    2) "1"
    3) "mongodb"
    4) "2"
    5) "mysql"
    6) "4"

    5、常用命令

    keys *   模糊匹配  查看key

    expire key  5    设置键的过期时间  5秒

    ttl key 查看key 的剩余过期时

    persist key    在key 没过期时 取消key 的过期时间

    select 选择数据库   0到15     ,将数据库分成16份为了数据安全,shell分片备份,不同类型数据放到不同数据库,库是逻辑划分不是物理划分

    move key 2    将key 移动到第二个数据库中

    rename 重命名key

    dbsize   查看当前数据库中有多少keys

    info  查看redis相关信息

    auth 密码   如果设置了密码   在redis.config   中requerepass

    6、持久化机制

    1、rdb    snapshotting  快照 默认方式默认 dump.rdb

    save 900 1         900秒内如果超过1个key被修改,则发起快照保存

    默认

    save 900 1
    save 300 10
    save 60 10000

    2、aof  append-only file    可以指定一个时间间隔 类似日志的行追加内容到

    appendonly.aof 中

    appendonly yes 启动aof持久化

    三种方式

    appendsync always   收到写命令就立即写入到磁盘,效率最慢,但是保证完全的持久化,常用

    appendsync everysec 每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中

    appendsync no 完全依赖os,性能最好,持久化没保证

    7、发布、订阅消息   可应用于公告

    subscribe aaa 订阅频道

    publish aa 内容    发布内容

    jedis 2.7以上版本才支持集群

    redis   可组合使用  比如 hash 和set  共用使用

    Map <String,String> map = new HashMap();

    User u = new User();

    map.put(id1,u1);

    map.put(id2,u2);

    hset USER_TABLE map;

    把要查询的条件放到set中  比较年龄等于20的user

    sadd user_age_20 id1

    三、主从    Master 可以拥有多个slave      读写分离,主做写,从做读

    修改两处配置文件

    四、redis 简单事务,目前redis 对事务支持不是太好

    multi     开始事务

    ----

    ----

    ----相关操作

    exec     执行提交

    discard 取消事务回滚

    jedis 客户端

    是redis 应用提供的java 访问客户端   第三方jar   操作redis

    redis 持久化

    RDB

    在服务器端创建RDB的三种条件

    1.服务器执行客户端发送的SAVE命令     会阻塞    一般空闲时可以

    2.BGSAVE     不会阻塞

    save 300 10    距离上次保存300秒后   超过10修改   就自动BGSAVE

    save 1000 100

    多个时  只有任意一个满足就执行

    3.自动   在配置文件中定时   BGSAVE

    AOF

    append only file

    自动重写条件

    auto-aof-rewrite-percentage 100              (100%当达到一倍时重写,要不永远卡到64mb)

    auto-aof-rewrite-min-size 64mb     最小64mb时重写

    三种策略

    Always  :服务器每写入一个命令  ,就把缓冲区里的数据同步到硬盘上,不丢失数据,浪费CPU

    Everysec: 每秒调用一次,最多丢1秒

    No: 不去调用同步

    默认Everysec

  • 相关阅读:
    第五周学习进度报告
    第四周学习进度报告
    第三周大数据学习进度
    十六周总结
    程序员修炼之道-从小工到专家阅读笔记03
    第二阶段冲刺10
    利用正则表达式,分割地址至省市县,更新MySQL数据库数据
    阅读笔记--《大型网站技术架构》—01大型网站概述
    第三周周总结——kettle的简单使用以及MYSQL数据库去重
    热词分析中运用可用性战术
  • 原文地址:https://www.cnblogs.com/jentary/p/9201489.html
Copyright © 2011-2022 走看看