嘿,你忘记写博客了~

盛年不重来,一日难再晨,及时宜自勉,岁月不待人....

Redis从入门到放弃

发布时间:2017-06-08编辑:windydeng浏览(1131)评论览(0)

    相信大家对Redis有一定的认识才会去学的,下面我们来开始Redis入门:


    服务器环境:linux/Centos6.3


    1:redis安装

    redis3.2.0.tar.gz安装包下载 http://download.csdn.net/detail/feng86gang/8817185

    这是windows下的下载,先下载下来,然后通过xshell传入到linux中。

    QQ图片20170608215709.png


    预安装软件:gcc,tcl


    解压安装包:tar -zxvf  redis-3.0.2.tar.gz 


      然后  cd redis-3.0.2


     编译安装:make&&make install


    把redis.conf拷贝到   /etc/redis目录里面   cp redis.conf /etc/redis/redis.conf


    修改配置项:vim /etc/redis/redis.conf (vim编辑器可以自己安装 yum install vim)

    QQ图片20170608220737.png


    把daemonize改为yes(后台启动)


    port 默认端口为6379,如果为了安全性,建议修改端口


    最后保存退出


    启动redis服务:redis-server  /etc/redis/redis.conf


    查看redis服务是否启动:ps aux |grep redis

    QQ图片20170608221241.png



    2:redis客户端的安装


    找到redis-cli的位置

    which redis-cli


    连接Redis客户端:redis-cli -h 127.0.0.1 -p 6379(默认服务主机名为127.0.0.1,端口号6379)


    QQ图片20170608221939.png



       3:redis数据类型介绍

            (一):string类型

    String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

    String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。


    相关命令

    SET key value                   设置key=valueGET key                         或者键key对应的值
    GETRANGE key start end          得到字符串的子字符串存放在一个键
    GETSET key value                设置键的字符串值,并返回旧值
    GETBIT key offset               返回存储在键位值的字符串值的偏移
    MGET key1 [key2..]              得到所有的给定键的值
    SETBIT key offset value         设置或清除该位在存储在键的字符串值偏移
    SETEX key seconds value         键到期时设置值
    SETNX key value                 设置键的值,只有当该键不存在
    SETRANGE key offset value       覆盖字符串的一部分从指定键的偏移
    STRLEN key                      得到存储在键的值的长度
    MSET key value [key value...]   设置多个键和多个值
    MSETNX key value [key value...] 设置多个键多个值,只有在当没有按键的存在时
    PSETEX key milliseconds value   设置键的毫秒值和到期时间
    INCR key                        增加键的整数值一次
    INCRBY key increment            由给定的数量递增键的整数值
    INCRBYFLOAT key increment       由给定的数量递增键的浮点值
    DECR key                        递减键一次的整数值
    DECRBY key decrement            由给定数目递减键的整数值
    APPEND key value                追加值到一个键

    使用示例

    redis 127.0.0.1:6379> set baidu http://www.baidu
    OK
    redis 127.0.0.1:6379> append baidu .com
    (integer) 20
    redis 127.0.0.1:6379> get baidu
    "http://www.baidu.com"
    redis 127.0.0.1:6379> set visitors 
    0OK
    redis 127.0.0.1:6379> incr visitors
    (integer) 1
    redis 127.0.0.1:6379> incr visitors
    (integer) 2
    redis 127.0.0.1:6379> get visitors"2"

     (二):list类型

    Redis列表是简单的字符串列表,可以类比到C++中的std::list,简单的说就是一个链表或者说是一个队列。可以从头部或尾部向Redis列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40亿个元素。

    Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

    相关命令

    • LLEN
      LLEN key 获取列表的长度

    • LPOP
      LPOP key 获取并取出列表中的第一个元素

    • LPUSH
      LPUSH key value1 [value2] 在前面加上一个或多个值的列表

    • LSET
      LSET key index value 在列表中的索引设置一个元素的值

    • RPOP
      RPOP key 取出并获取列表中的最后一个元素

    • RPUSH
      RPUSH key value1 [value2] 添加一个或多个值到列表

    使用示例

    redis 127.0.0.1:6379> lpush list1 redis
    (integer) 1
    redis 127.0.0.1:6379> lpush list1 hello
    (integer) 2
    redis 127.0.0.1:6379> rpush list1 world
    (integer) 3
    redis 127.0.0.1:6379> llen list1
    (integer) 3
    redis 127.0.0.1:6379> lrange list1 0 3
    1) "hello"
    2) "redis"
    3) "world"
    redis 127.0.0.1:6379> lpop list1"hello"
    redis 127.0.0.1:6379> rpop list1"world"
    redis 127.0.0.1:6379> lrange list1 0 3
    1) "redis"
     (三):set类型

    可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。

    set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

    相关命令

    • SADD
      SADD key member [member ...] 添加一个或者多个元素到集合(set)里

    • SACRD
      SCARD key 获取集合里面的元素数量

    • SDIFF
      SDIFF key [key ...] 获得队列不存在的元素

    • SDIFFSTORE
      SDIFFSTORE destination key [key ...] 获得队列不存在的元素,并存储在一个关键的结果集

      • SISMEMBER
        SISMEMBER key member 确定一个给定的值是一个集合的成员

      • SMEMBERS
        SMEMBERS key 获取集合里面的所有key


    使用示例

    redis> SADD myset "Hello"
    (integer) 1
    redis> SADD myset "World"
    (integer) 1
    redis> SMEMBERS myset
    1) "World"2) "Hello"
    redis> SADD myset "one"
    (integer) 1
    redis> SISMEMBER myset "one"
    (integer) 1
    redis> SISMEMBER myset "two"
    (integer) 0
    (四):hash类型
    
    相关命令
    HDEL
    HDEL key field[field...] 删除对象的一个或几个属性域,不存在的属性将被忽略
    
    HGET
    HGET key field 获取对象中该field属性域的值
    • HSET
      HSET key field value 设置对象指定字段的值

    • HKEYS
      HKEYS key 获取对象的所有属性字段

    • HVALS
      HVALS key 获取对象的所有属性值

    • HLEN
      HLEN key 获取对象的所有属性字段的总数

    • HMGET
      HMGET key field[field...] 获取对象的一个或多个指定字段的值

    • HMSET
      HMSET key field value [field value ...] 同时设置对象中一个或多个字段的值

    使用示例

    127.0.0.1:6379> hset person name jack(integer) 1
    127.0.0.1:6379> hset person age 20
    (integer) 1
    127.0.0.1:6379> hset person sex famale(integer) 1
    127.0.0.1:6379> hgetall person1) "name"
    2) "jack"
    3) "age"
    4) "20"
    5) "sex"
    6) "famale"
    127.0.0.1:6379> hkeys person1) "name"
    2) "age"
    3) "sex"
    127.0.0.1:6379> hvals person
    (五):sort set类型
    Redis有序集合类似Redis集合,不同的是增加了一个功能,即集合是有序的。一个有序集合的每个成员带有分数,用于进行排序。
    Redis有序集合添加、删除和测试的时间复杂度均为O(1)(固定时间,无论里面包含的元素集合的数量)。列表的最大长度为2^32- 1元素(4294967295,超过40亿每个元素的集合)。
    Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。


    相关命令

    • ZADD
      ZADD key score1 member1 [score2 member2] 添加一个或多个成员到有序集合,或者如果它已经存在更新其分数

    • ZCARD
      ZCARD key 得到的有序集合成员的数量

    • ZCOUNT
      ZCOUNT key min max 计算一个有序集合成员与给定值范围内的分数

    • ZINCRBY
      ZINCRBY key increment member 在有序集合增加成员的分数

    • ZRANGE
      ZRANGE key start stop [WITHSCORES] 由索引返回一个成员范围的有序集合(从低到高)

    • ZRANK
      ZRANK key member 确定成员的索引中有序集合

    • ZREVRANGE
      ZREVRANGE key start stop [WITHSCORES] 返回一个成员范围的有序集合,通过索引,以分数排序,从高分到低分

    使用示例

    redis 127.0.0.1:6379> zadd dbs 100 redis
    (integer) 1
    redis 127.0.0.1:6379> zadd dbs 98 memcached
    (integer) 1
    redis 127.0.0.1:6379> zadd dbs 99 mongodb
    (integer) 1
    redis 127.0.0.1:6379> zadd dbs 99 leveldb
    (integer) 1
    redis 127.0.0.1:6379> zcard dbs
    (integer) 4
    redis 127.0.0.1:6379> zcount dbs 10 99
    (integer) 3
    redis 127.0.0.1:6379> zrank dbs leveldb
    (integer) 1
    redis 127.0.0.1:6379> zrank dbs other
    (nil)
    redis 127.0.0.1:6379> zrangebyscore dbs 98 100
    1) "memcached"
    2) "leveldb"
    3) "mongodb"
    4) "redis"

    4:PHP安装redis扩展


    (一):php redis扩展安装

    PHP环境自行安装,这里就不做讲解了!

    wget https://github.com/phpredis/phpredis/archive/develop.zip(wget请提前安装 yum install wget )


    首先查看php扩展:php -m

    QQ图片20170608225107.png


    开始是没有redis扩展的


    然后确认下是否安装phpize和php-config


    如果没有请安装:yum install  php-devel


    然后查看php-config的安装路径

    QQ图片20170608225639.png


    我们先解压develop.zip压缩包


    unzip develop.zip(如果解压失败估计是没有unzip这个软件,可使用命令yum install unzip安装)


    cd phpredis-develop


    生成命令 phpize 

    QQ图片20170608230150.png


    把编译安装的扩展存入一个路径:./configure -with-php-config=/usr/bin/php-config


    编译安装:make&&make install 


    修改php配置文件:在php.ini里面加入extension=redis.so


    然后再输入php -m查看php扩展是否有redis


    5:PHP操作redis

    在根目录创建一个目录:mkdir code

    QQ图片20170608231037.png

    cd code


    编辑文件:vim connect.php

    在里面输入连接代码:

    <?php

    $redis=new \Redis();

    $redis->connect("127.0.0.1",6379);

    $redis->set("key1","value1");

    $val=$redis->get("key1");

    echo $val;

    ?>


    QQ图片20170608231422.png


    退出保存后 php connect.php运行代码!


    QQ图片20170608231702.png

    好了,如果你能掌握这么多,redis也算是入门了!

    感谢你的浏览!如果你觉得这边文章对你有所帮助,可以推荐给其他人!

关键字词:Redis从入门到放弃