[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 "\xoc\x1" # 反序列化给定的序列化值为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
Refer:Redis高级用法