zoukankan      html  css  js  c++  java
  • Redis 基本操作

    参考网址:http://doc.redisfans.com/           

    redis 在操作的时候,不区分大小写(包括php)

     

    Key(键)

    DEL key [key ...]

    删除给定的一个或多个 key 。

    不存在的 key 会被忽略。

    http://doc.redisfans.com/key/del.html

    EXISTS key

    检查给定 key 是否存在。

    http://doc.redisfans.com/key/exists.html

    String(字符串)

    GET key

    返回 key 所关联的字符串值。

    如果 key 不存在那么返回特殊值 nil 。

    假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值。

    http://doc.redisfans.com/string/get.html

    SET key value [EX seconds] [PX milliseconds] [NX|XX]

    将字符串值 value 关联到 key 。

    如果 key 已经持有其他值, SET 就覆写旧值,无视类型。

    对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

    http://doc.redisfans.com/string/set.html

    Hash(哈希表)

    HSET key field value    设置值          hset

    将哈希表 key 中的域 field 的值设为 value 。

    如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。

    如果域 field 已经存在于哈希表中,旧值将被覆盖。

    http://doc.redisfans.com/hash/hset.html

    HGET key field        获取值         hget

    返回哈希表 key 中给定域 field 的值。

    http://doc.redisfans.com/hash/hget.html

    HGETALL key                       获取所有key        hgetall

    返回哈希表 key 中,所有的域和值。

    在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

    http://doc.redisfans.com/hash/hgetall.html

    HDEL key field                   删除key下的域                               

     删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

    http://doc.redisfans.com/hash/hdel.html

    HINCRBY key field increment   递增(整数) hincrby

    为哈希表 key 中的域 field 的值加上增量 increment 。

    增量也可以为负数,相当于对给定域进行减法操作。

    如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

    如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 

    http://doc.redisfans.com/hash/hincrby.html

    HINCRBYFLOAT key field increment   递增(浮点) hincrbyfloat

    为哈希表 key 中的域 field 加上浮点数增量 increment 。

    如果哈希表中没有域 field ,那么 HINCRBYFLOAT 会先将域 field 的值设为 0 ,然后再执行加法操作。

    如果键 key 不存在,那么 HINCRBYFLOAT 会先创建一个哈希表,再创建域 field ,最后再执行加法操作

    http://doc.redisfans.com/hash/hincrbyfloat.html

    hash的不能马上设置时间,只能用expire来设置key的时间,所以自己写个redis类来实现比较好。

    expire 设置失效时间(单位/秒)
    persist 取消失效时间
    ttl/pttl(单位为 秒/毫秒) 查看键的剩余时间

    有偿阅读项目用到:

    hash
    $redis = model('Redis');
    $redis::hSet('yhytest','yhy','3332',20);//非原生reids(reids模块)
    $redis::hSet('yhytest','yhy2','454',20);//非原生reids(reids模块)
    echo $redis::hGet('yhytest','yhy');//非原生reids(reids模块)
    var_dump($redis::$redis->hgetall('pd_yhytest')); //用原生的redis
     $bool5 = $redis::hIncrBy('user:jifen:day:('.$date.')',$uid,$jifen,3*24*3600); //用户当天金币//非原生reids(reids模块)
     

    List(列表)

    LPUSH key value [value ...]       从左边插入(相当于php的array_unshift)   # 列表允许重复元素

    将一个或多个值 value 插入到列表 key 的表头

    如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist c,列表的值将是 a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。

    如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。

    当 key 存在但不是列表类型时,返回一个错误。

    http://doc.redisfans.com/list/lpush.html

    LPOP key     从左边移除(php的array_shift) 

    移除并返回列表 key 的头元素。

    http://doc.redisfans.com/list/lpop.html

    RPUSH key value [value ...]     从右边插入(相当于php的array_push)  

    将一个或多个值 value 插入到列表 key 的表尾(最右边)。

    如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist c ,得出的结果列表为 c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。

    如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。

    当 key 存在但不是列表类型时,返回一个错误。

    http://doc.redisfans.com/list/rpush.html

    RPOP key   从右边移除(php的array_pop) 

    移除并返回列表 key 的尾元素。

    http://doc.redisfans.com/list/rpop.html

    LLEN key   查询长度(就是list里有几个)

    返回列表 key 的长度。

    如果 key 不存在,则 key 被解释为一个空列表,返回 0 .

    如果 key 不是列表类型,返回一个错误。

    http://doc.redisfans.com/list/llen.html

    LINDEX key index      查询(用下标)

    返回列表 key 中,下标为 index 的元素。

    下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

    你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

    如果 key 不是列表类型,返回一个错误。

    http://doc.redisfans.com/list/lindex.html

    LRANGE key start stop     区间查询    例如:lrange key 0 -1   查询全部

    返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

    下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

    你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

    注意LRANGE命令和编程语言区间函数的区别

    假如你有一个包含一百个元素的列表,对该列表执行 LRANGE list 10 ,结果是一个包含11个元素的列表,这表明 stop 下标也在LRANGE 命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,比如Ruby的 Range.new 、 Array#slice 和Python的range() 函数。

    超出范围的下标

    超出范围的下标值不会引起错误。

    如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,那么 LRANGE 返回一个空列表。

    如果 stop 下标比 end 下标还要大,Redis将 stop 的值设置为 end 。

    http://doc.redisfans.com/list/lrange.html

    有偿阅读项目用到:

    list
    $lastRead = $redis::$redis->lindex(config('redis_prefix').'user:jifen:log:('.$this->uid.')',0);
    $bool4 = $redis::$redis->lpush(config('redis_prefix').'user:jifen:log:('.$uid.')',$record); //金币记录(保留100条)
    $num = $redis::$redis->llen (config('redis_prefix').'user:jifen:log:('.$uid.')');
    $redis::$redis->rpop(config('redis_prefix').'user:jifen:log:('.$uid.')');
     

    Set(集合)

    SADD key member [member ...]      集合里不可添加一样的值(值唯一) sadd

    将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

    假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

    当 key 不是集合类型时,返回一个错误。

    http://doc.redisfans.com/set/sadd.html

    SREM key member [member ...]     移除某个值  srem

    移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

    当 key 不是集合类型,返回一个错误。

    http://doc.redisfans.com/set/srem.html

    SMEMBERS key    查询所有成员,返回是数组(array)形式【php】

    返回集合 key 中的所有成员。

    不存在的 key 被视为空集合。

    http://doc.redisfans.com/set/smembers.html

     
    有偿阅读项目用到:
    set
    $redis::sadd('blacklist:ip',$ip);
    $ips = $redis::smembers('blacklist:ip');
    $aNum = Redis::sRem('article:favor:('.$articleId.')',$uid);
     

    SortedSet(有序集合)

    ZADD key score member [[score member] [score member] ...]    有序集合添加,添加键值存在并且值一样的添加不进去,除此之外都行(已存在的键值,值会被覆盖)

                                                【添加已存在元素,且 score 值不变】  【添加已存在元素,但是改变 score 值】

    将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

    如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

    score 值可以是整数值或双精度浮点数。

    如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

    当 key 存在但不是有序集类型时,返回一个错误。

    对有序集的更多介绍请参见 sorted set 。

    http://doc.redisfans.com/sorted_set/zadd.html

    ZRANGE key start stop [WITHSCORES]          按区间(根据下标)获取成员,按 score 值递增(从小到大)来排序(默认)

    可以只取值不取键:ZRANGE salary 0 -1           # 显示整个有序集成员

    返回有序集 key 中,指定区间内的成员。

    其中成员的位置按 score 值递增(从小到大)来排序。

    具有相同 score 值的成员按字典序(lexicographical order )来排列。

    如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。

    下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
    你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
    超出范围的下标并不会引起错误。
    比如说,当 start 的值比有序集的最大下标还要大,或是 start stop 时, ZRANGE 命令只是简单地返回一个空列表。
    另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。
    可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。
    客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。

    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]   按区间(根据下标,可判断大小的)获取成员,按 score 值递增(从小到大)来排序(默认)

    可以只取值不取键:  ZRANGEBYSCORE salary -inf +inf # 显示整个有序集

    返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

    具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。

    http://doc.redisfans.com/sorted_set/zrangebyscore.html

    ZREM key member [member ...]     移除某个成员

    移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

    当 key 存在但不是有序集类型时,返回一个错误。

    有偿阅读项目用到:

    zadd
    $uNum = $redis::$redis->zAdd(config('redis_prefix').'user:article:favor:('.$uid.')_zadd',$now,$articleId);//原生
    $category = Redis::zRangeByScore('user:mycategory:('.$this->uid.')','-inf','+inf');
    $uNum = Redis::zRem('user:article:favor:('.$uid.')',$articleId);
    Redis::zdel('user:mycategory:('.$this->uid.')');//删除用户频道缓存 //用的是reids模块里的,原生没有,是直接删除key的

    Pub/Sub(发布/订阅)

    Transaction(事务)

  • 相关阅读:
    软考估分
    极限编程(XP)12个最佳实践
    常见符号的英文读法
    又一道信号量的问题--做多了就容易错
    一道信号量前驱图的题目--有技巧
    信号量计算问题--n个进程, 共享3个资源, 当前信号量为-1, 其他进程继续执行P操作, 那么信号量应该继续减
    一道信号量的问题---卖火车票
    一道关于信号量的问题
    一道关于信号量的题目
    C语言int型数据范围
  • 原文地址:https://www.cnblogs.com/hfdp/p/6023209.html
Copyright © 2011-2022 走看看