zoukankan      html  css  js  c++  java
  • 一篇博客搞定redis基础

    redis简介


    redis 一款高性能key-value数据库,实际上多用作缓存队列或者消息分发(celery),但是最常常被用来做缓存。

    redis安装


    源码安装

    $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
    $ tar xzf redis-2.8.17.tar.gz
    $ cd redis-2.8.17
    $ make
    

    命令安装

    $sudo apt-get update
    $sudo apt-get install redis-server
    
    #brew install redis
    

    redis配置


    常用配置项

    daemonize no #是否已守护进程方式运行,yes是的,no不是,默认不是
    pidfile /var/run/redis.pid 当守护进程模式运行时,redis会把pid写入pid文件
    port 6379
    bind 127.0.0.1
    timeout 300
    loglevel verbose #日志级别,默认为verbose,其他有debug、notice、warning
    logfile stdout #日志输出方式,当守护进程模式运行时,输出到/dev/null
    database 16 #数据库个数,默认16个
    save 900 1 #900秒内有一次变更则同步数据到同步文件
    dbfilename dump.rdb本 #地数据库名字,默认dump.rdb
    dir ./ #指定本地数据库存放目录
    salveof 1.1.1.1 30 #主从双机或者多机收,配置从方指定主方的地址和端口
    masterauth 配置主方密码
    requirepass xxxxxx   #配置需要密码访问,xxxxxx是配置的密码
    maxclients 128
    maxmemory 1000000 #单位Bytes
    appendonly no #指定是否更新操作后尽心日志记录,redis会默认的把异步数据写入磁盘,如果不开启该选项,可能导致掉电、时候一小段时间内的数据损失(数据永久化的一种方式)
    appendfilename appendonly.aof #配置更新日志文件名
    appendfsync everysec/always/no #配置更新日志记录,no表示等OS进行数据缓存到磁盘,everysec比奥斯每秒一次,always表示每次更新后手动调用fsync()写入数据到磁盘
    

    redis数据类型


    字符串

    redis 127.0.0.1:6379> SET name "runoob"
    OK
    redis 127.0.0.1:6379> GET name
    "runoob"
    

    哈希

    redis> HMSET myhash field1 "Hello" field2 "World"
    "OK"
    redis> HGET myhash field1
    "Hello"
    redis> HGET myhash field2
    "World"
    

    列表

    redis 127.0.0.1:6379> lpush runoob redis
    (integer) 1
    redis 127.0.0.1:6379> lpush runoob mongodb
    (integer) 2
    redis 127.0.0.1:6379> lpush runoob rabitmq
    (integer) 3
    redis 127.0.0.1:6379> lrange runoob 0 10
    1) "rabitmq"
    2) "mongodb"
    3) "redis"
    redis 127.0.0.1:6379>
    

    集合

    String的无序集合

    redis 127.0.0.1:6379> sadd runoob redis
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob mongodb
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob rabitmq
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob rabitmq
    (integer) 0
    redis 127.0.0.1:6379> smembers runoob
    
    1) "redis"
    2) "rabitmq"
    3) "mongodb"
    

    有序集合

    redis 127.0.0.1:6379> zadd runoob 0 redis
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 mongodb
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 rabitmq
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 rabitmq
    (integer) 0
    redis 127.0.0.1:6379> > ZRANGEBYSCORE runoob 0 1000
    1) "mongodb"
    2) "rabitmq"
    3) "redis"
    

    redis客户端使用

    redis-cli -h 127.0.0.1 -p 6379 -a 'QWERasdf1234'
    

    键值(KEY)


    SET xxxx yyyy #xxxx就是key
    DEL xxxx
    DUMP xxxx
    EXISTS xxxx
    EXPIRE xxxx seconds
    MOVE xxxx db(数字)
    RANDOMKEY #随机返回一个key
    RENAME xxxxx xxxxxxxxx  #重命名key
    TYPE xxxx 返回键值所存储的值的类型 
    

    字符串


    SET key value #存储键值对应的值
    GET key
    GETRANCE key start end #返回字符串中的子字符串,类似于MySQL的SUBSTRING
    STRLEN #返回key存储的字符串长度
    GETSET key value #获取key的旧值,设置key的新值为value
    MGET key1 key2
    APPEND key value 追加value到源value的末尾
    MSET key value key value #设置多个key-value的键值对
    

    哈希


    像存python的字典,一个key下面对应的是field和value

    HMGET key filed field2
    HSET key field value  #设置key中的字段和值
    HGET key field  获取key中的某字段的值
    HDEL key field field1 ...  #删除key中的某个或某些字段
    HEXISTS key field   #判别某个key中的某个字段是否存在
    HKEYS key  #获取hash表中的所有字段
    HLEN key #获取hash表中的字段数量
    HMSET key field1 value1 field2 value2
    HVALS key #获取key中所有值
    HSCAN key cursor [match pattern] [COUNT count] #迭代键值对
    

    列表

    列表都可以设置timeout,可以当做队列或栈


    BLPOP key1 key2 ... #获取列表的第一个元素
    BRPOP key1 key2 ... #获取列表的最后一个元素 
    LPOP key #移出列表的第一个元素
    LPUSH key value key value #插入一个或多个值进入列表 
    LLEN key #获取列表长度
    LRANGE key start end  #获取列表指定范围的元素
    LREM key count value #移出列表元素
    LSET key index value #设置列表中的某个值
    

    集合和有序集合


    SADD key value1 value2  #集合中增加成员 
    SCARD key #集合的成员数
    SREM key value1 value2 #移除集合中的成员
    SRANDMEMBER key count 获取集合中的一个或多个随机数
    SDIFF key1 key2 #求差集
    SUNION key1 key2 # 求并集
    SISMEMBER  key value #判断key中是否有value
    ZADD key score1 value1 score2 value2  # score1 是序号
    ZREM key value1 #删除key下的某个value
    ZRANGE key start end  #获取key中的start到end范围的value
    ZCARD key  #获取成员数
    

    redis的用作缓存或消息队列

    PUBLISH channel message #发布消息
    PSUBSCRIBE pattern #订阅一个或多个给定模式的频道
    SUBSCRIBE #订阅一个或多个频道的信息
    UNSUBSCRIBE #退订频道
    


    redis的事务机制


    每一条命令都是原子性的,每个事务集合不是原子性的。

    事务集合

    MULTI
    SET A A
    SET B B
    ...
    EXEC
    

    事务命令

    DISCARD取消事务
    MULTI+EXEC 开始和执行
    WATCH key 监控key
    UNWATCH 取消WATCH对所有可以的监控
    

    redis连接测试

    redis-cli
    auth xxxxxx  密码认证
    PING  测试服务运行与否,运行回PONG
    QUIT
    SELECT X 切换数据库
    

    服务器与备份


    INFO 查看服务器与备份
    CLIENT LIST 列出客户端
    TIME 获取当下时间
    FLUSHALL/FLUSHDB 删除所有/当前数据库所有key
    MONITOR调试用
    SAVE 保存
    博主简介:博主国内安全行业目前最强大的网络安全公司做技术研究员,常年做技术工作。 获得过以下全国竞赛大奖: 《中国电子作品大赛一等奖》 《云计算技术大赛一等奖》 《AIIA人工智能大赛优胜奖》《网络安全知识竞赛一等奖》 《高新技术个人突出贡献奖》,并参与《虚拟化技术-**保密**》一书编写,现已出版。还拥有多项专利,多项软件著作权! 且学习状态上进,立志做技术牛逼的人。座右铭:在路上,永远年轻,永远热泪盈眶。可邮件联系博主共同进步,个人邮箱:pigeon_code@163.com
  • 相关阅读:
    eval()一个有意思的PHP函数
    PHP error_reporting() 函数
    网络编程基础--协程--greenlet切换---gevent自动识别 IO ---
    网络编程基础--多线程---concurrent.futures 模块---事件Event---信号量Semaphore---定时器Timer---死锁现象 递归锁----线程队列queue
    rpm -qa 查找文件
    Linux Gvim shell 创建第一个shell脚本
    centos7修改网卡名称为eth0-技术流ken
    pxe+kickstart自动化批量安装系统详解-技术流ken
    cobbler单台服务器实现批量自动化安装不同版本系统-技术流ken
    cobbler批量安装系统使用详解-技术流ken
  • 原文地址:https://www.cnblogs.com/mutudou/p/14803304.html
Copyright © 2011-2022 走看看