[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

原文地址:https://www.cnblogs.com/farwish/p/4712377.html