zoukankan      html  css  js  c++  java
  • [Redis]Redis的五种数据类型与键值/服务器相关命令

    --------------------------------------------------------------------------------------

    String(字符串):最简单的数据类型。

      set age 18

      ( set age 18 ex 5 )   # 设置过期时间5秒

      setex age 5 18      # 效果同上, 使用 ttl age 可以查看剩余有效时间

      psetex age 5000 18    # 同上,只是以毫秒为单位设置key的过期时间

      ( set age 18 nx )     # 如果age键不存在才设置

      setnx age 18      # 效果同上

      get age

        

      ( set email chenw(a)59store.com )

      setrange email 9 live.com   # 从第6个位置开始用value值替换键的值,得到的结果是 chenw@live.comcom,后面多出的不会替换

      

      mset key1 a key2 b       # 一次性设置一个或多个值,使用get获取

      msetnx key1 c          # 如果键不存在,设置一个或多个值

      getset email farwish(a)live.com # 键设为指定值,并返回旧值

      getrange email 3 6     # 返回key从3到6的子字符串,得到wish

      mget key1 key2       # 返回所有给出的key的值

      incr age         # 对键的值自增1,返回新值;键不存在时则设置

      incrby age 3        # 对键的值自增指定值(可以是负值),返回新值;键不存在时则设置

      incrbyfloat age 0.5    # 为key的值加上浮点数增量值

      decr age          # 自减1

      decrby age 3       # 自减指定值  

      append email .cn     # 将value追加到原键值末尾

      strlen email       # 返回键存储的字符串长度

      bitcount email       # 计算给定字符串中,被设置为 1 的比特位的数量

      bitop operation deskkey key1 key2 # 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上

      setbit key offset value  # 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)

      getbit key offset     # 对 key 所储存的字符串值,获取指定偏移量上的位(bit)

    Hash(哈希表):适用于存储对象,相较于存储单个string,占用更少的内存。

      hset user:1 name farwish  # 将hash表中name值设为farwish,已存在时覆盖

      hget user:1 name      # 取出hash表中name值

      hsetnx user:1 name      # 如果不存在则设置,存在则返回0

      

      hmset user:2 name weichen age 20 # 同时设置多个值到hash表

      hmget user:2 name age      # 批量获取多个字段的值

      

      hincrby user:2 age 5      # 为hash表中字段age增加5

      hincrbyfloat user:2 age 0.5    # 允为hash表中字段增加浮点值

      hexists user:2 name       # 判断hash表中某个字段是否存在

      hlen user:2             # 返回hash表中字段的数量

      

      hdel user:2 age          # 删除hash中某个字段

      hkeys user:2          # 返回hash表中所有的字段

      hvals user:2           # 返回hash表中所有的值

      hgetall user:1           # 返回hash表中,所有的字段和值

      

      hscan               # 迭代哈希键中的键值对,用法同scan

    List(列表):链表结构,每个子元素都是string类型的双向链表;通过push、pop从链表头部尾部添加删除元素,既可以作为栈(先进后出),也可以作为队列(先进先出)。

      lpush mylist a b c     # 在链表头部压入一个或多个value,返回元素个数,如果key不存在,则创建并执行lpush操作

      lpushx nolist a      # 与lpush的不同之处在于,(1) 只能压入一个value (2) 当key不存在时,什么也不做

      lrange mylist 0 -1     # 返回链表中指定区间的元素,0表示第一个,-1表示最后一个,-2表示倒数第二个

      rpush mylist A        # 在链表尾部压入一个或多个value;c b a A

      rpushx mylist       # 与rpush的不同之处在于,(1) 只能压入一个value (2) 当key不存在时,什么也不做

      linsert mylist before a B # 在a之前插入B到链表中;c b B a A

      ( linsert mylist after A B ) # 在A之后插入B到链表中;c b B a A B

      lset mylist 0 C      # 将mylist下标为0的值设为C;C b B a A B

      lrem mylist 2 B        # (remove)删除2个列表中与B相等的元素,如果数量为0表示移除所有B,返回删除成功的数量;C b a A

      ltrim mylist 1 -1     # 保留列表内指定区间范围的元素,其余删除;b a A

      lpop mylist         # 删除并返回列表的头元素;a A

      rpop mylist         # 删除并返回列表的尾部元素;a

      rpoplpush mylist mylist  # 从尾弹出一个元素并从头压入;a

      ( lpush list1 A B C; rpoplpush list1 mylist ) 从list1尾部弹出元素并压入mylist头部;A a

      lindex mylist 1      # 返回列表中下标为1的元素,不存在返回nil

      llen mylist         # 返回列表中元素个数;2

      blpop key timeoutSeconds # lpop命令的阻塞版本,列表内没有元素弹出时连接将阻塞,直到等待超时或发现可弹出元素为止;给定多个key参数时,blpop按给定key参数排列顺序一次检查;相同的key可以被多个客户端同时阻塞;key为空返回nil,否则返回弹出元素的key和被弹出的元素

      ( blpop list2 5 )  由于list2不存在,5秒后将超时;

      ( blpop list2 mylist 2 )  开始在list2处阻塞,直到mylist,弹出A;

      brpop key timeout     # 同blpop

      brpoplpush list1 a 5     # rpoplpush的阻塞版本,列表非空时,表现和rpoplush一样,列表为空时,brpoplpush将阻塞连接,直到超时或有另一客户端执行lpush或rpush命令为止

    Set(集合): String类型的无序集合,通过hash table实现,对集合可以取并集、交集、差集。

      sadd sns crazysns.cn farwish.com   # 将一个或多个元素添加到集合sns中,如果元素已经存在,则忽略

      smembers sns             # 返回集合中所有成员

      srem sns crazysns.cn         # 移除集合中一个或多个元素,没有则忽略,非集合则报错;返回被成功移除的数量

      ( sadd sns weibo.com, sadd sns qq.com, sadd sns renren.com, sadd sns fb.com )

      spop sns                # 移除并返回集合中的一个随机元素

      ( sadd sns2 qq.com t.com )

      sdiff sns sns2             # 取差集,返回sns不在sns2中的元素,以第一个key为标准

      sdiffstore sns3 sns sns2        # 与sdiff类似,只是将sns和sns2的差集保存到sns3,返回成功保存的数量

      sinter sns sns2             # 取交集(intersect),返回交集元素列表

      sinterstore sns4 sns sns2       # 与sinter类似,只是将sns和sns2的交集保存到sns4,返回成功保存的数量

      sunion sns sns2            # 取并集,返回全部成员

      sunionstore sns5 sns sns2        # 与sunion类似,只是将sns和sns2的交集保存到sns5,返回成功保存的数量

      smove sns sns2 weibo.com       # 把sns中的元素weibo.com移动到sns2中,成功返回1

      scard sns                # 返回集合的元素个数

      sismember sns qq.com         # 判断qq.com是否为sns的元素,是返回1,不是返回0

      srandmember sns           # 随机返回一个元素

      scan 0                  # 迭代当前数据库中的数据库键,返回一部分集合,如果全部列出,则返回0和集合列表;如果只列出一部分,则返回下一个游标的值和当前的集合列表;相当于分页或linux的more命令,一次只查看部分,scan以游标记录位置;适宜数据量大时,代替keys或smembers,不过会存在数据已显示或更新,只能保证当前显示的数据准确。

      

    SortedSet(有序集合):Set的升级版,在set的基础上增加顺序属性,类似加了一列sort字段

      zadd company 1 apple 2 google 3 ms   # 将一个或多个元素及顺序值加入集合,若某个元素存在则只更新顺序值

      zrange company 0 -1 withscores      # 显示集合中第一个到最后一个的元素和顺序号,不加withscores则不显示顺序号

      zrem company apple ms          # 删除有序集合中一个或多个元素,成功返回被删除的数量,不包括被忽略成员

      zincrby company 3 google         # 为有序集合成员顺序号加上增量值,返回新顺序值

      ( zadd company 3 twitter )

      zrank company google          # 按顺序值从小到大排列,返回有序集合中指定元素的索引;1

      ( zadd company ebay )

      ( zrank company google )         # 2

      zrevrank company google         # 按顺序值从大到小排列,返回有序集合中指定元素的索引;0

      zrevrange company 0 -1 withscores    # zrange的降序排列

      

      zrangebyscore company 3 4       # 返回从小到大指定顺序区间内的元素

      zrevrangebyscore company 4 3      # 返回从大到小指定顺序区间内的元素

      zcount company 3 4           # 返回指定顺序区间内的元素数量

      zcard company               # 返回所有有序集合的个数

      

      zremrangebyrank company 2 2      # 删除有序集合中索引区间内的成员

      zremrangebyscore company 4 5     # 删除有序集合中顺序区间内的成员

      

      zscore company google          # 取有序集合成员的顺序号

      ( zadd cp gg )

      zunionstore all 2 company cp           # 将2个有序集合company和cp的并集,保存到all集合中

      ( zunionstore all 2 company cp weight 1 3 ) # weight用于给对应的集合加上因子,即cp有序集合中的元素顺序号都乘以3    

      ( zadd min 10 a; zadd min 20 b; zadd min 30 c; )

      ( zadd max 40 a; zadd max 50 b; zadd max 60 c; )

      ( zadd mid 70 a; zadd mid 80 b; zadd mid 90 c; )

      zinterstore sum 2 min max         # 计算给定有序集合的交集,2为集合的数量,交集存储到sum

      

      ( zinterstore sum2 3 min max mid )    # 如果数量不正确也会报错

      

      

      zscan                    # 用法同scan

      

      ( zadd myzset 0 b 0 a 0 d 0 c 0 e 0 f )

      zrangebylex myset - +            #  对有序集合在指定的范围内的元素排序,如果score值相同,则根据成员的字典序排序;- 表示负无穷,+ 表示正无穷,( 表示开区间,[ 表示闭区间

      

      

      

      zlexcount myzset - +           # 返回有序集合介于-到+之间的成员的数量;6

      zremrangebylex myzset [a (c       # 移除有续集合介于[a 到(c 之间的成员,返回成功移除的数量;2

     

    键的相关命令

      keys *       # 返回符合匹配模式的所有键

      (keys sns*)    

      exists mylist    # 检查某个key是否存在,存在返回1,不存在返回0

      del mylist sns    # 删除一个或多个key,成功返回删除的数量,失败返回0

      expire sns 5    # 设置一个key的过期时间(秒)

      pexpire sns 5000  # 功能同上(以毫秒计算过期时间)

      pexpireat sns 1231312331 # 以毫秒为单位设置key过期的unix时间戳

      persist sns      # 移除给定key的过期时间,即取消过期设置;此时ttl sns返回-1表示已成功移除过期时间 

      ttl sns       # 查看一个key的剩余生存时间(秒),-1表示过期

      pttl sns       # 以毫秒为单位返回key的剩余生存时间

      ( select 0 )      # 选择0数据库,默认有0-15共16个数据库

      move sns 1     # 将sns移动到数据库1;

      radomkey      # 返回一个随机的key

      rename min miin   # 重命名一个key;成功返回1

      renamenx min max  # 仅当新的key名不存在时,才执行重命名;已存在返回0

      type myzset    # 返回一个key存储的值的类型;zset

      scan        # 迭代当前数据库中的数据库键,返回一部分集合; 详细见上面String类型部分

      dump myzset                # 序列化给定的key,返回被序列化的值

      restore myzset-again 0 "xocx1"      # 反序列化给定的序列化值为redis的键,  restore key ttl serialized_value (ttl 为毫秒,0则不设置过期时间)

      migrate 192.168.1.11 6379 sns 0 1000  # 毫秒超时时间内将key原子性的从当前实例传送到目标实例的指定数据库上,成功,key出现在目标实例上,当前实例的key被删除;只会出现三种结果:迁移成功,迁移失败,等待超时;migrate host port key db timeout

      object

      sort      # 返回或保存所给的 列表、集合、有序集合的key中经过排序的元素;sort默认排序对象是数字,对字符串排序需要显示添加alpah修饰符

      ( sort [get pattern] [limit] [get pattern] [asc|desc] [store destination] )

      ( lpush number 1 4 10 3 )

      ( sort number )        # 1 3 4 10

      ( sort number desc )      # 10 4 3 1

      ( lpush site www.baidu.com www.z.cn www.farwish.com )

      # 使用alpha修饰符

      ( sort site alpha )       # www.baidu.com www.farwish.com www.z.cn

      # 使用limit修饰符

      ( sort number limit 0 2 )    # 1 3

      ( sort number limit 3 4 )    # 10

      # 使用外部key进行排序;

      ( lpush uid 1 )

      ( set user_name_1 user1 )

      ( set user_level_1 999 )

      ( lpush uid 2 )

      ( set user_name_2 user2 )

      ( set user_level_2 777 )

      ( lpush uid 3 )

      ( set user_name_3 user3 )

      ( set user_level_3 888 )

      ( lpush uid 4 )

      ( set user_name_4 user4 )

      ( set user_level_4 889 )

      ( sort uid )                    # 1 2 3 4

      # 通过by选项,让uid按其他键的元素来排序

      ( sort uid by user_level_* )             # 2 3 4 1  (按level值排序了777 888 889 999)

      # 使用get选项,可以根据排序的结果取出相应的键值

      ( sort uid get user_name_* )            # user1 user2 user3 user4

      # 组合使用by和get,让排序结果以更直观的方式显示

      ( sort uid by user_level_* get user_name_* )   # user2 user3 user4 user1 

      # 同时使用多个get选项,获取多个外部键的值,井号可以获取被排序键的值

      ( sort uid get user_level_* get user_name_* )   # 999 user1 777 user2 888 user3 889 user4

      ( sort uid get # get user_level_* get user_name_* ) # 1 999 user1 2 777 user2 3 888 user3 4 889 user4

      # 获取外部键,但不排序;通过将一个不存在的键作为参数传给by选项,可以让sort跳过排序操作

      ( sort uid by user_nick_* get # get user_level_* get user_name_* )

      # 将哈希表作为by和get的参数

      ( hmset user_info_1 name u1 age 18 level 9 )

      ( hmset user_info_2 name u2 age 19 level 7 )

      ( hmset user_info_3 name u3 age 20 level 8 )

      ( hmset user_info_4 name u4 age 21 level 6 )

      ( sort uid by user_info_*->level )               # 4 2 3 1

      ( sort uid by user_info_*->level get user_info_*->name )  # u4 u2 u3 u1

      # 保存排序结果, (可以对排序结果设置expire作为缓存,这样可以避免频繁调用sort,同时避免多个客户端进行缓存重建,考虑使用setnx )

      ( sort number store stored_numbers )

      ( lrange stored_numbers 0 -1 )                # 1 3 4 10

      

    服务器相关命令

      ping         # 检测redis连接是否有效,正常返回pong

      echo 'message'  # 打印特定信息,测试时使用

      auth 123456    # 进入客户端后,输入密码使用

      select 0      # 选择指定索引的数据库,索引从0开始

      quit        # 退出客户端连接

      dbsize        # 返回当前数据库所有key的数量

      info        # 返回redis服务器的各种信息和统计数据

      config get *    # 返回运行中redis的配置参数

      ( config get timeout )

      flushdb       # 清空当前数据库所有key

      flushall       # 清空所有数据库所有key

      

    Link: http://www.cnblogs.com/farwish/p/4712377.html

  • 相关阅读:
    [Java123] JDBC and Multi-Threading 多线程编程学习笔记
    3:2D装换 [ 重点 ]
    2:属性选择器 + 结构伪类选择器 + 伪元素
    1:新增 H5 常用属性
    day2
    代码实操第一天
    1 滑动门
    css高级技巧
    11:网页布局总结
    10:定位
  • 原文地址:https://www.cnblogs.com/farwish/p/4712377.html
Copyright © 2011-2022 走看看