zoukankan      html  css  js  c++  java
  • Redis介绍及使用

    NOSQL几种类型

    Berkeley

     开源是嵌入式数据库,有极好的并发伸缩,支持事务及嵌套事务,海量数据存储等重要特性。用于存储数据方面有极高的价值。,然而该产品的Licence为GPL,这就意味着它不是在所有情况下都是免费的,并且一般情况下不能单独使用
    

    MongoDB

      和Berkeley不同的是MongoDB可以单独使用,主要用于高并发的论坛博客使用,这些论坛博客主要特征是并发高、多读少写、数据量大、逻辑关系简单,以及文档作为数据主要源。和Berkeley一样该产品的Licence为GPL
    

    Redis

    典型的NoSQL数据库服务器,和BerkeleyDB相比它可以独立运行自己的服务器主机。它除了key/vale之外还支持List、set和OrderedSet等数据结构。它是Apache Licence 完全免费的。它是持久化的,如果服务器宕机也不会导致数据消失。
    

    memcache

      数据缓存服务器。他们之间最大的区别,memcache知识提供了存储服务,一旦服务器宕机,之前砸内存中缓存的数据全局消失。一次可以看出memcache没有提供任何形式的数据持久化功能。而Redis提供了这样的功能。
    

    Redis 安装

    下载

    可使用wget 注解从网站下载也可在windows下下载完成通过ft'p传到指定目录下
    wget http://download.redis.io/releases/redis-4.0.1.tar.gz
    默认下载到当前目录。

    解压 tar

    使用tar -zxf redis-4.0.1.tar.gz 解压

    移动(可选) mv

    如果你想给redis 安装到指定目录下,使用mv命令移动
    mv /edis-4.0.1 /service/redis
    mv:从哪->到哪

    编译 make

    因为redis 用的是c语言编写,所以还需要编译一下才能安装。
    如果提示找不到yum 要先安装 gcc-c—++使用 yum install gcc-c++

    安装

    进入到redis解压目录,使用 make install prefix=安装路径
    安装完毕。

    启动服务端 使用默认配置文件 方法1

    进入到解压路径目录下(到bin目录下) 或者直接指定全部路,否则找不到redis-service 命令的。 想不明白想想windows执行命令。

     
    [root@linux bin]# ls
    redis-benchmark redis-check-rdb redis-sentinel
    redis-check-aof redis-cli redis-server
    [root@linux bin]# redis-server
    

    修改配置文件

    vim redis.conf
    port 端口
    daemonize yes 配置为守护进程,后台启动
    bind 配置指定IP访问,如果指定所有人访问 注释掉bind 并且关闭保护模式 protected-mode 改成no
    requirepass 设置密码
    客户端使用 auth 密码 才可以访问

     
    root@linux ~]# redis-cli -p 8989
    127.0.0.1:8989> set name lihai
    (error) NOAUTH Authentication required.
    127.0.0.1:8989> auth lixiaohai
    OK
    127.0.0.1:8989> set name lixiaohai
    OK
    127.0.0.1:8989> get name
    "lixiaohai"
    127.0.0.1:8989> 
    

    启动服务器 并指定配置文件(方法2)

    • 先到解压包里面找到redis.confg
    [root@linux bin]# cd ../../gz
    [root@linux gz]# ls
    redis-3.2.8 redis-3.2.8.tar.gz
    [root@linux gz]# ls redis-3.2.8
    00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
    BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
    
    • 从当前目录复制到你想存放的目录,建议放到redis/bin下
    [root@linux redis-3.2.8]# cp redis.conf ../../redis/bin/
    [root@linux redis-3.2.8]# cd ../../redis/bin/
    [root@linux bin]# ls
    dump.rdb redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
    
    • 启动redis 并使用特定的配置文件
    [root@linux bin]# redis-server redis.conf
    

    启动客服端

    • 连接本机的6379端口 方法1
     
    cd /java/redis/redis/bin
    [root@linux bin]# ls
    redis-benchmark redis-check-rdb redis-sentinel
    redis-check-aof redis-cli redis-server
    [root@linux bin]# redis-cli
    127.0.0.1:6379> 
    
    • 连接指定主机,指定端口 (/java/redis/redis/bin 我的redis 安装目录)
     
    [root@linux bin]# cd /java/redis/redis/bin
    [root@linux bin]# ls
    dump.rdb redis-check-aof redis-cli redis-sentinel
    redis-benchmark redis-check-rdb redis.conf redis-server
    [root@linux bin]# redis-cli -h localhost -p 6379
    localhost:6379> get name
    "xiaohaili"
    localhost:6379> 
    

    测试数是否可用

     
    127.0.0.1:6379> set name xiaohaili
    OK
    127.0.0.1:6379> get name
    "xiaohaili"
    127.0.0.1:6379> 
    

    关闭

    • 从客户端直接使用shutdown
     
       localhost:6379> shutdown
        not connected> 
    
    • 从服务端直接关闭 redis-cli shutdown
     
        [root@linux bin]# cd /java/redis/redis/bin
        [root@linux bin]# ls
        dump.rdb redis-check-aof redis-cli redis-sentinel
        redis-benchmark redis-check-rdb redis.conf redis-server
        [root@linux bin]# redis-cli shutdown
        [root@linux bin]# 
    

    查看redis进程

     
       ps aux|grep redis
       [root@linux bin]# ps aux|grep redis
       root 10045 0.0 0.0 112708 972 pts/1 R+ 11:31 0:00 grep --color=auto redis
      [root@linux bin]# 
    

    使用redis操作

    redis 数据类型

     Redis数据就是以key-value形式来存储的,key只能是字符类型,value可以是以下五种类型,String,List,Sorted-Sets,Hash
    

    String类型

    简介

     字符串类型是Redis最为基础的数据存储类型,它在Redis是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像格式或者JSON对象格式,在Redis中字符串类型的Value最多可以容纳数据长度是512M
    

    操作

    • set 和get

    set key value [Ex seconds] [PX milliseconds] [NX|XX]
    Ex 秒
    PX 毫秒
    NX 当key不存在的时候起作用
    XX 当key存在时候才起作用
    注意:EX PX NX|XX 不能同时使用
    ttl key 查看过 期时间

    127.0.0.1:8989> set xiaokey xiaovalue ex 100
    OK
    127.0.0.1:8989> get xiaokey
    "xiaovalue"
    127.0.0.1:8989> ttl xiaokey
    (integer) 90
    127.0.0.1:8989> ttl xiaokey
    (integer) 87
    127.0.0.1:8989> 
     
    
    • select 1-15
      切换数据库,redis默认提供16个数据库 ,数据库名用数字表示。索引从0开始
      select 1 切换到第二个数据库
    • exists key
      判断是否存在当前key,如果存在返回1,不存在返回0
    • append 追加
      append key value
      如果当前key存在追加value,不存在创建key和value
    • strlen 查看值得长度
      strlen key
    • flushdb 清空数据库
    • incr
      incr key 递增 每次key的vlaue递增1
    • decr
      decr key 递减 每次key递减1
    • incrby 设置递增步数
      incrby key 5 每次给key值递增5
    • desrby 每次递减步数
      desrby key 6 每次给key的递减6
      *getset
      取到一个key 并把这个key付给一个新值
    • setex
      setex key seconds value 添加一个key 并指定过期时间
    • setnx
      setnx key vlaue 只有当一个key不存在的时候执行
      *setbit
      设置指定位置的值
    • getbit
      获取指定位的bit值
    • mset
      一次性可以设置多个key value
      mset key1 "hellow word" key2 "no"
    • mget
      一次性获取多个
      mget key1 key2
    • msetnx
      一次性获取多个,但是key不存在的时候才执行(一个key存在所有key都存储失败)

    List类型

    概述

     在Redis中,List类型是按照顺序插入排序的字符串链表。和数据结构中的普通链表一样,我们可以再其头部和尾部添加新的元素。在出让时,如果该键并不存在,Redis姜维该键创建一个新的链表。与此相比,如果链表中所有的元素均被移除,name该键也将会从数据库中删除。List可以包含的最大元素数量是4292967295,。
       从插入和删除的效率视角看,如果我们在链表的两头插入或者删除,这将会是效率非常高的。即使链表中已经存储了百万数据记录,该操作可以在常亮内完成。然而需要说明的是没如果元素插入或者删除在作用于链表中间,name效率非常低。
    

    操作

    • lpush
      创建一个key,然后将参数中的values从左到右插入
      lpush mykey a b c d e f
    (integer) 6
    
    • rpush 创建一个key,然后将参数的values 从右开始插入
    lpush mykeyright a b c d e f
    (integer) 6
    127.0.0.1:8989> lrange mykeyright 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
    
    • rpushx 当一个key已存在的时候从右边开始增加
    lrange mykeyright 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
    7) "g"
     
    
    • lpushx key存在的时候插入,不存在时候不插入。
    lpushx mykey 1
    (integer) 9
    127.0.0.1:8989> lpushx mykeynotexit 1 2 3
    (error) ERR wrong number of arguments for 'lpushx' command
    
    • lrange 根据key 取出list数据
     lrange mykey 0 3
    1) "f"
    2) "e"
    3) "d"
    4) "c"
    

    取出所有 -1 代表所有

    lrange mykey 0 -1
    1) "f"
    2) "e"
    3) "d"
    4) "c"
    5) "b"
    6) "a"
    
    • lpop 取出列表里面第一个元素并删除(从左开始)
      lpop mykey
    127.0.0.1:8989> llen mykey
    (integer) 7
    127.0.0.1:8989> lpop mykey
    "123"
    127.0.0.1:8989> llen mykey
    (integer) 6
    

    rpop 取出列表里面的第一个元素并删除(从右到左)

    127.0.0.1:8989> lrange mykey 0 -1
    1) "d"
    2) "dd"
    3) "cc"
    4) "c"
    127.0.0.1:8989> rpop mykey
    "c"
    127.0.0.1:8989> lrange mykey 0 -1
    1) "d"
    2) "dd"
    3) "cc"
    127.0.0.1:8989> 
     
    

    rpoppush 从右取出第一个并删除,放到另外一个列表(从左边放进去)

    127.0.0.1:8989> lpush mykey a b 
    (integer) 2
    127.0.0.1:8989> lpush mykey1 e d
    (integer) 2
    127.0.0.1:8989> lrange mykey 0 -1
    1) "b"
    2) "a"
    127.0.0.1:8989> lrange mykey1 0 -1
    1) "d"
    2) "e"
    127.0.0.1:8989> rpoplpush mykey mykey1
    "a"
    127.0.0.1:8989> lrange mykey1 0 -1
    1) "a"
    2) "d"
    3) "e"
    
    • llen 取出列表长度
    llen mykey
    (integer) 6
     
    
    • lrem 删除指定个数的关键词
    lrem key 个数 关键词
    127.0.0.1:8989> lpush mykey a b c d e f a b c d e f a b c d e f
    (integer) 18
    127.0.0.1:8989> lrem mykey 2 b
    (integer) 2
    127.0.0.1:8989> lrange mykey 0 -1
     1) "f"
     2) "e"
     3) "d"
     4) "c"
     5) "a"
     6) "f"
     7) "e"
     8) "d"
     9) "c"
    10) "a"
    11) "f"
    12) "e"
    13) "d"
    14) "c"
    15) "b"
    16) "a"
     
    
    • lindex 取出指定索引的元素
     lindex mykey 2
    "d"
    
    • lset 设置指定索引的值
     lset mykey 2 ss
    OK
    127.0.0.1:8989> lindex mykey 2
    "ss"
    
    • ltrim 去除指定位置两边的元素
    lpush mykey a b c d e f
    (integer) 6
    127.0.0.1:8989> ltrim mykey 2 4
    OK
    127.0.0.1:8989> lrange mykey 0 -1
    1) "d"
    2) "c"
    3) "b"
    
    • linsert 在指定数值前后面插入元素
     linsert mykey after d dd  在d后面插入dd
     lrange mykey 0 -1
    1) "d"
    2) "c"
    3) "b"
    127.0.0.1:8989> linsert mykey after d dd
    (integer) 4
    127.0.0.1:8989> lrange mykey 0 -1
    1) "d"
    2) "dd"
    3) "c"
    4) "b"
     linsert mykey before c cc    在c前面插入cc
    127.0.0.1:8989> linsert mykey before c cc
    (integer) 5
    127.0.0.1:8989> lrange mykey 0 -1
    1) "d"
    2) "dd"
    3) "cc"
    4) "c"
    5) "b"
    

    Set 类型

    概述

     在Redis中,我们可以将Set类型看作为没有排序的字符集合(java set一样)也可以在该类型的数据值上执行添加,删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4294967295.
     和List类型不同的是,Set结合中不可以出现重复的元素。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions并,intersections交和differences差。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。
    

    操作

    • sadd 给set结合里面插入集合元素,如果已经存在不再插入
    127.0.0.1:8989> sadd setkey a b c
    (integer) 3
    127.0.0.1:8989> sadd setkey a d
    (integer) 1
    127.0.0.1:8989> smembers setkey
    1) "d"
    2) "a"
    3) "c"
    4) "b"
    
    • smembers 查看指定set key里面的元素
    127.0.0.1:8989> smembers setkey
    1) "d"
    2) "a"
    3) "c"
    4) "b"
    
    • sismember 判断某一个元素是否在set结合里面
    127.0.0.1:8989> sismember setkey a
    (integer) 1
    127.0.0.1:8989> sismember setkey ggg
    (integer) 0
     
    

    *scard 获取结合里面个数

    127.0.0.1:8989> scard setkey
    (integer) 4
    
    • srandmember 随机放回集合中的元素 ,默认返回一个,可指定数量
    127.0.0.1:8989> SRANDMEMBER setkey 3
    1) "d"
    2) "b"
    3) "c"
    127.0.0.1:8989> SRANDMEMBER setkey 
    "d"
    
    • spop 随机取出来指定元素并删除。
    127.0.0.1:8989> sadd setkey a b c
    (integer) 3
    127.0.0.1:8989> smembers setkey
    1) "a"
    2) "c"
    3) "b"
    127.0.0.1:8989> spop setkey
    "a"
    127.0.0.1:8989> smembers setkey
    1) "c"
    2) "b"
    127.0.0.1:8989> 
     
    
    • srem 移除指定元素
    127.0.0.1:8989> smembers setkey
    1) "c"
    2) "b"
    127.0.0.1:8989> srem setkey c
    (integer) 1
    127.0.0.1:8989> smembers setkey
    1) "b"
    
    • smove 把一个key里面指定的元素移动到另外一个数组
    127.0.0.1:8989> sadd setkey a b c
    (integer) 3
    127.0.0.1:8989> sadd setkey1 d f
    (integer) 2
    127.0.0.1:8989> smove setkey setkey1 c
    (integer) 1
    127.0.0.1:8989> SMEMBERS setkey1
    1) "d"
    2) "c"
    3) "f"
    
    • sdiff 取出多个结合里面值不同的数据
    127.0.0.1:8989> sadd setkey a b c
    (integer) 3
    127.0.0.1:8989> sadd setky1 d c
    (integer) 2
    127.0.0.1:8989> sadd setkey2 b c d 
    (integer) 3
    127.0.0.1:8989> sdiff setkey setkey1 setkey2
    1) "a"
    
    • sdiffstore 对比结合不同的值,并放到一个新的结合
    127.0.0.1:8989> sadd setkey a b c
    (integer) 3
    127.0.0.1:8989> sadd setky1 d c
    (integer) 2
    127.0.0.1:8989> sadd setkey2 b c d 
    (integer) 3
    127.0.0.1:8989>SDIFFSTORE setkeysdiff setkey setkey1 setkey2
    (integer) 1
    127.0.0.1:8989> SMEMBERS setkeysdiff
    1) "a"
    
    • sinter 去多个集合中的交集
    127.0.0.1:8989> sadd setkey a b 
    (integer) 2
    127.0.0.1:8989> sadd setkey1 a c
    (integer) 2
    127.0.0.1:8989> sadd setkey2 a e
    (integer) 2
    127.0.0.1:8989> sinter setkey setkey1 setkey2
    1) "a"
    
    • sinterstore 取它们的交集,并把集合存放到一个新的key中
    127.0.0.1:8989> sadd setkey a b
    (integer) 2
    127.0.0.1:8989> sadd setkey1 a c
    (integer) 2
    127.0.0.1:8989> sadd setkey2 a f
    (integer) 2
    127.0.0.1:8989> sinterstore newkey setkey setkey1 setkey2
    (integer) 1
    127.0.0.1:8989> SMEMBERS newkey
    1) "a"
    
    • sunion 取结合中的并集
    127.0.0.1:8989> sadd setkey a b
    (integer) 2
    127.0.0.1:8989> sadd setkey1 a c
    (integer) 2
    127.0.0.1:8989> sadd setkey2 a f
    (integer) 2
    SUNION setkey setkey1 setkey2 
    1) "a"
    2) "f"
    3) "c"
    4) "b"
    
    • sunionstore 取集合中的并集并放到一个新的集合中
    SUNIONSTORE newkeys setkey setkey1 setkey2
    (integer) 4
    127.0.0.1:8989> smembers newkeys
    1) "a"
    2) "f"
    3) "c"
    4) "b"
    

    Sorted-Sets 类型

    概述:

    Sorted-Sets和Sets类型极为相似,也成为Zset,它们都是字符集合,都不可以重复,它们之间的区别在于Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正式通过分数啦为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的。但是分数(score)确实可以重复的。
    在Sorted-Set中 添加、删除或者更新一个成员都是非常快速的操作。由于Sorted-Sets总的成员在集合中的位置是有序的,因此,即使是访问位于集合中的成员也是效率非常高的。事实上,Redis具有的这一特性在很多其他类型的数据库中是很难实现的。换句话说,在该点上想要达到和Redis同样的效率,在其他数据库中进行模建是非常困难的。

    操作

    • zadd 给zset里面添加数据,默认排序是由分数从小到大排序
    127.0.0.1:8989> zadd zsetkey 8 aa
    (integer) 1
    127.0.0.1:8989> zadd zsetkey 6 bb
    (integer) 1
    127.0.0.1:8989> zadd zsetkey 10 cc
    (integer) 1
    127.0.0.1:8989> zrange zsetkey 0 -1
    1) "bb"
    2) "aa"
    3) "cc"
    
    • zrange 获取元素 按索引分值从低到高
      查看所有分数
    127.0.0.1:8989> zrange zsetkey 0 -1
    1) "bb"
    2) "aa"
    3) "cc"
    //查看数值并显示分数
    127.0.0.1:8989> zrange zsetkey 0 -1 withscores
    1) "bb"
    2) "6"
    3) "aa"
    4) "8"
    5) "cc"
    6) "10"
    
    • zrevrange 按索引分值从高到低
    127.0.0.1:8989> zadd setkey 10 aa
    (integer) 1
    127.0.0.1:8989> zadd setkey 20 bb
    (integer) 1
    127.0.0.1:8989> zadd setkey 3 cc
    (integer) 1
    127.0.0.1:8989> zadd setkey 8 dd
    (integer) 1
    127.0.0.1:8989> ZREVRANGE setkey 0 -1
    1) "bb"
    2) "aa"
    3) "dd"
    4) "cc"
    
    • zrevrangebyscore 按分数从高到低

    • zcard 查看集合中元素的个数

    zcard zsetkey
    (integer) 3
    
    • zcount 查看集合中个数,可指定条件
    //获取zsetkey 分数在5-20之间的个数
    zcount zsetkey 5 20
    (integer) 3
     
    
    • zrank 查看某个元素所在集合的索引
    zrank zsetkey aa
    (integer) 1
    
    • zscore 根据指定数值查看分数
    zscore zsetkey aa
    "8"
    
    • zincrby 根据指定值增加分数值
    127.0.0.1:8989> zadd setkey 8 aa
    (integer) 1
    127.0.0.1:8989> zadd setkey 9 bb
    (integer) 1
    127.0.0.1:8989> zincrby setkey 10 bb
    "19"
    127.0.0.1:8989> zrange setkey 0 -1 withscores
    1) "aa"
    2) "8"
    3) "bb"
    4) "19"
    
    • zrangebyscore 根据分数获取 由低到高获取
    // 获取分数1-20之间
    ZRANGEBYSCORE setkey 1 20
    1) "aa"
    2) "bb"
    // 获取分数1-20之间 并显示2条
    ZRANGEBYSCORE setkey 1 20 limit 1 2
    1) "bb"
    2) "cc"
    
    • ZREVRANGEBYSCORE 根据分数获取 由高到低获取
    ZREVRANGEBYSCORE setkey 20 8
    1) "bb"
    2) "aa"
    3) "dd"
    
    • zrevrank 根据数值获取集合索引 从高到低
    zrevrank setkey dd
    (integer) 2
    
    • zremrangebyscore 删除指定分数元素
    // 删除1-14分的数据 返回删除个数
    127.0.0.1:8989> ZREMRANGEBYSCORE setkey 1 14
    (integer) 3
    127.0.0.1:8989> zrange setkey 0 -1
    1) "dd"
    2) "ff"
    
    
    • ZREMRANGEBYRANK 根据索引删除元素
      //删除0到1索引之间的元素 返回删除个数
    ZREMRANGEBYRANK setkey 0 1
    (integer) 2
    

    Hash类型

    概述:

    可以将Redis中的Hash类型看成具有String key和String value的map容器。所以该类型非常适合存储于对象的信息。如username、password和Age等。如果Hash中包含很少的字段,那么该类型也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

    操作

    • hset 新增
    127.0.0.1:8989> hset hkey name tom
    (integer) 1
    127.0.0.1:8989> hset hkey age 10
    (integer) 1
    127.0.0.1:8989> hset hkey sex '男'
    (integer) 1
    127.0.0.1:8989> hget hkey name
    "tom"
    
    • hget 根据file获取值
    127.0.0.1:8989> hget hkey name
    "tom"
    
    • hlen 判断集合里面的个数
    127.0.0.1:8989> hset hkey name tom
    (integer) 1
    127.0.0.1:8989> hset hkey age 10
    (integer) 1
    127.0.0.1:8989> hset hkey sex '男'
    (integer) 1
    127.0.0.1:8989> hlen hkey
    (integer) 3
    
    • hexists 判断是否存在
    hexists hkey name
    (integer) 1
    
    • hdel 在指定key中根据file删除
    hdel hkey name
    (integer) 1
    
    • hsetnx 这指定key中file不存在的时候才生效
    127.0.0.1:8989> hset hkey name tom
    (integer) 1
    127.0.0.1:8989> hset hkey age 10
    (integer) 1
    127.0.0.1:8989> hsetnx hkey name tom
    (integer) 0
    
    • hincrby 对指定数值进行增长
    127.0.0.1:8989> hget hkey age
    "30"
    127.0.0.1:8989> hincrby hkey age 10
    (integer) 40
    127.0.0.1:8989> hget hkey age
    "40"
    127.0.0.1:8989> 
    
    • hmset 一次性设置多个值
    hmset hashkey name toms age 10 sex '男'
    
    OK
    127.0.0.1:8989> hgetall hashkey
    1) "name"
    2) "toms"
    3) "age"
    4) "10"
    5) "sex"
    6) "xe7x94xb7"
    
    • hmget 一次性获取多个值
    hmget hashkey name age 
    1) "toms"
    2) "10"
    
    • hgetall 获取所有key和value
    hgetall hashkey
    1) "name"
    2) "toms"
    3) "age"
    4) "10"
    5) "sex"
    6) "xe7x94xb7"
    
    • hkeys 取出所有的key
    127.0.0.1:8989> hkeys hashkey
    1) "name"
    2) "age"
    3) "sex"
    
    • hvals 取出所有的value
      127.0.0.1:8989> hvals hashkey
    1. "toms"
    2. "10"
    3. "xe7x94xb7"

    其他命令

    keys

     keys * 获取所有的key
    也可以使用通配符
    keys  s*
    

    del

    删除 指定key del key

    exists

    判断key是否存在

    move

        把当前数据库中的key 移动到指定位置
    
    move zset 2
    (integer) 1
    127.0.0.1:8989> select 2
    OK
    127.0.0.1:8989[2]> exists zset
    

    rename 修改key名

    127.0.0.1:8989[2]> rename zset newzset
    OK
    

    ttl 查看key的过期时间

    presist 设置一个key永不过期

    expire 设置过期时间

    type 查看key的类型

    randomkey 随机获取一个key

    事务

    multi 开始事务

    exec 提交事务

    discard 回滚事务

    主从请求

    概述

    在Redis中配置Master-Slave模式非常简单,Redis中主从复制的特点和优势

    • 同一个Master可以同步多个Slaves
    • Slaves同样可以接受其他Slaves的连接和同步请求,可以有效地肥仔Master的同步压力,所以可以将Redis的Replicaiton架构视为图结构
    • Master Server是以非租塞的方式为Slaves提供服务,所以在Master-Slave同步期间,客户端仍然可以提交查询或者修改请求
      *Slave Server同样是以非租塞的方式完成数据库同步,在同步期间,如果有客户端提交查询请求,Redis则放回同步之前的数据
    • 为了分在Master的读操作压力,Slave服务器可以为客户端提供只读的操作服务,写服务仍然必须有Master完成。即便如此,系统的伸缩性还是得到了很大的提高。
    • Master可以将数据保存操作交给Slaves完成,从而避免在Master中要有独立的进程来完成此操作。

    配置

    • 配置
      • 在从服务器上使用如下命令
        salveof ip 端口号
        服务器重启之后不再从主服务器上配置,
    • 在conf配置 永久生效
      slaveof ip 端口
      如果主服务器有密码,需要指定密码
      masterauth 密码

    持久化

    概述

    Redis 提供了持久化方式

    • RDB
      该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘
    • AOF
      该机制将以日志的形式记录服务器所处理的每一个写操作。在Redis服务器启动之初会读取该配置文件来重新构造数据库,保证启动后数据库的数据是完整的。

    RDB

    • Redis database 通过单文件的方式来持久化
    • RDB是默认的持久化方式,默认存储在启动redis服务器时所在当前目录下dump.rdb文件中,一般都会修改存储在一个固定的目录下
      编辑redis.conf 文件
      dbfilename :文件名(默认是dump.rdb) 可以修改

    dir ./默认位置

    dir /路径 保存咋指定位置。

    持久化的机制

    • 在数据库关闭时会持久化(需要注意的是数据库宕机时不会生成,数据可能会丢失)
    • 满足特定条件时会持久化
      编辑配置文件
      save 900 1 //在900秒内,只要有1个key发生变化,就会dump持久化
    • RDB 优缺点
      缺点:可能会丢失数据
      优点:效率比较高

    AOF

    • Append Only File
      通过操作日志的方式持久化
      编辑配置文件
      appendonly yes
      appendfilename 默认appendonly.aof 可以修改名字
      dir 修改目录
      appendfsync
      • always 每次写操作都会同步
        慢 但是安全
      • no 放到内存中,不会持久存储
        快 但不安全 容易丢失
      • everysec 美妙存储一次。
    • AOF 优缺点
      缺点: 效率比较差
      优点:丢失数据量比较少。

    在Java中使用redis

    • 使用Jedis
      Jedis是一个封装了redis的java客户端,继承了redis的一些命令操作,提供了连接池管理功能。

    • 使用Spring data Redis
      简称SDR,在spring应用中读写Redis数据库更简单

  • 相关阅读:
    利用docker搭建测试环境--安装
    fiddler获取手机请求
    python多线程
    linux下安装python的第三方module
    shell编程sed笔记
    shell 函数
    mysql information_schema 数据库简介:
    shell常用的判断条件
    gulp:gulp-sass基础教程
    (六):关于全局config配置
  • 原文地址:https://www.cnblogs.com/lilihai/p/10142052.html
Copyright © 2011-2022 走看看