redis常用命令

来源:互联网 发布:手机怎么破解网络限制 编辑:程序博客网 时间:2024/06/08 07:16

最近学习redis,记录一下

redis官网:redis.io

中文官网:http://www.redis.net.cn

github地址:https://github.com/antirez/redis

redis和memcached相比,的独特之处:

1: redis可以用来做存储(storge), 而memccached是用来做缓存(cache)

  这个特点主要因为其有”持久化”的功能.

2: 存储的数据有”结构”,对于memcached来说,存储的数据,只有1种类型--”字符串”,

  而redis则可以存储字符串,链表,哈希结构,集合,有序集合

1、Redis下载安装

1:官方站点: redis.io 下载最新版或者最新stable版

2:解压源码并进入目录

3: 不用configure

4: 直接make

(如果是32位机器 make 32bit)

 

:易碰到的问题,时间错误.

原因: 源码是官方configure过的,但官方configure时,生成的文件有时间戳信息,

Make只能发生在configure之后,

如果你的虚拟机的时间不对,比如说是2012年

解决: date -s ‘yyyy-mm-ddhh:mm:ss’   重写时间

    再 clock -w  写入cmos

 

5: 可选步骤: make test  测试编译情况

(可能出现: need tcl  >8.4这种情况, yum install tcl)

 

6: 安装到指定的目录,比如 /usr/local/redis

make PREFIX=/usr/local/redis install

注: PREFIX要大写

 

7: make install之后,得到如下几个文件

redis-benchmark  性能测试工具

redis-check-aof  日志文件检测工(比如断电造成日志损坏,可以检测并修复)

redis-check-dump  快照文件检测工具,效果类上

redis-cli 客户端

redis-server 服务端

 

 

8: 复制配置文件

Cp /path/redis.conf /usr/local/redis


9: 启动与连接

/path/to/redis/bin/redis-server  ./path/to/conf-file

例:[root@localhostredis]# ./bin/redis-server ./redis.conf

 

连接: 用redis-cli

#/path/to/redis/bin/redis-cli [-h localhost-p 6379 ]

 

10: 让redis以后台进程的形式运行

编辑conf配置文件,修改如下内容;

daemonize yes

2、redis各个类型操作命令

set key value 
设置key和value

get key 
获取key对应的值

keys * 
获取当前库的所有key

exist key 
返回key是否存在

type key 
返回key存储的值的类型 有string,link,set,order set, hash

del key 
删除key

rename key newkey 
重命名key

renamenx key newkey 
当库里有newkey时不做任何操作,如果没有newkey则进行重命名

select db 
切换redis数据库

move key db 
移动key到对应的库下

expire key 整数 
设置key的生命周期 整数单位是秒

ttl key 
查询key的生命周期 返回的是秒数 注:对于不存在的key返回-2,已过期的key或者不过期的key都返回-1

pexpire key 整数 
设置key的生命周期 整数单位是毫秒

pttl key 
查询key的生命周期 返回的是毫秒数 注:对于不存在的key返回-2,已过期的key或者不过期的key都返回-1

persist key 
把指定key设置永久有效
flushdb 
清空当前库

2.1、Redis 字符串 (Strings)

set key value [ex 秒数] / [px 毫秒数]  [nx] /[xx]
如: set a 1 ex 10 , 10秒有效
Set a 1 px 9000  , 9秒有效
注: 如果ex,px同时写,以后面的有效期为准
如 set a 1 ex 100 px 9000, 实际有效期是9000毫秒
nx: 表示key不存在时,执行操作
xx: 表示key存在时,执行操作

mset  即multi set  
一次性设置多个键值
mset key1 v1 key2 v2 ....

mget key1 key2 ..keyn 
获取多个key的值

setrange key offset value 
把字符串的offset偏移字节,改成value

append key value 
把value追加到key的原值上

getrange key start stop 
是获取字符串中 [start, stop]范围的值 注意: 对于字符串的下标,左数从0开始,右数从-1开始

getset key newvalue 
获取并返回旧值,设置新值

incr key 
指定的key的值加1,并返回加1后的值 
注意:
1:不存在的key当成0,再incr操作
2: 范围为64有符号

incrby key number 
指定key的值加指定数

decr key 
指定的key的值减1,并返回减1后的值 

decrby key number 
指定的key的值减去指定数

2.2、Redis 列表(Lists)

lpush key value 
把值插入到链接头部

rpush key value 
把值插入到链接尾部

lpop key 
返回并删除链表头元素

rpop key 
返回并删除链表尾元素

lrem key count value 
从key链表中删除 value值
注: 删除count的绝对值个value后结束
Count>0 从表头删除
Count<0 从表尾删除

lrange key start  stop 
返回链表中[start ,stop]中的元素
规律: 左数从0开始,右数从-1开始

ltrim key start stop 
剪切key对应的链接,切[start,stop]一段,并把该段重新赋给key

lindex key index
返回index索引上的值

llen key
计算链接表的元素个数

linsert  key after|before search value
作用: 在key链表中寻找’search’,并在search值之前|之后,.插入value
注: 一旦找到一个search后,命令就结束了,因此不会插入多个value
例如:
test:1>lrange char 0 -1
 1)  "b"
 2)  "c"
 3)  "d"
test:1>linsert char after d h
"4"

test:1>lrange char 0 -1
 1)  "b"
 2)  "c"
 3)  "d"
 4)  "h"
test:1>

rpoplpush source dest
作用: 把source的尾部拿出,放在dest的头部,
并返回 该单元值

场景: task + bak 双链表完成安全队列
Task列表                             bak列表

业务逻辑:
1:Rpoplpush task bak
2:接收返回值,并做业务处理
3:如果成功,rpop bak 清除任务. 如不成功,下次从bak表里取任务
例如:
test:1>lrange char 0 -1
 1)  "b"
 2)  "c"
 3)  "d"
 4)  "h"
test:1>rpoplpush char bak
"h"
test:1>lrange char 0 -1
 1)  "b"
 2)  "c"
 3)  "d"
test:1>lrange bak 0 -1
 1)  "h"
test:1>

brpop ,blpop  key timeout
作用:等待弹出key的尾/头元素, 
Timeout为等待超时时间
如果timeout为0,则一直等待

场景: 长轮询Ajax,在线聊天时,能够用到

2.3、bitmaps(位图)

getbit key offset 
获取值的二进制表示,对应位上的值(从左,从0编号)

setbit  key offset value 
设置offset对应二进制位上的值
返回: 该位上的旧值
注意: 
1:如果offset过大,则会在中间填充0,
2: offset最大大到多少
3:offset最大2^32-1,可推出最大的的字符串为512M

bitop operation destkey key1 [key2 ...] 
对key1,key2..keyN作operation,并将结果保存到 destkey 上。
operation 可以是 AND 、 OR 、 NOT 、 XOR
注意: 对于NOT操作, key不能多个

2.4、Redis 集合 (Sets)

set集合的性质: 唯一性,无序性,确定性


sadd key  value1 value2
往集合key中增加元素

smembers key
查看key中的所有元素

srem value1 value2
删除集合中集为 value1 value2的元素
返回值: 忽略不存在的元素后,真正删除掉的元素的个数

spop key
返回并删除集合中key中1个随机元素

srandmember key
返回集合key中一个随机数

sismember key value
判断元素是否在集合key中存在,存在:1,不存在:0

scard key
查看key中元素个数

smove source dest value
把source中的value删除,并添加到dest集合中
例如:
test:2>smembers sett
 1)  "e"
 2)  "b"
 3)  "d"
 4)  "c"
 5)  "a"
test:2>scard sett
"5"
test:2>smove sett dest a 
"1"
test:2>smembers dest
 1)  "a"
test:2>smembers sett
 1)  "e"
 2)  "b"
 3)  "d"
 4)  "c"

sinter  key1 key2 key3 ...
求出key1 key2 key3 三个集合中的交集,并返回
例如:
test:2>sadd sur1 a b c d e
"5"
test:2>sadd sur2 b c e f g
"5"
test:2>sadd sur3 c e g b a
"5"
test:2>sinter sur1 sur2 sur3
 1)  "e"
 2)  "c"
 3)  "b"
test:2>

sinterstore dest key1 key2 key3
求出key1 key2 key3 三个集合中的交集,并赋给dest
例如:
test:2>sinterstore dest sur1 sur2 sur3
"3"
test:2>smembers dest
 1)  "e"
 2)  "b"
 3)  "c"
test:2>

sunion key1 key2 key3
返回key1 key2 key3三个集合的并集
test:2>sunion sur1 sur2 sur3
 1)  "e"
 2)  "f"
 3)  "b"
 4)  "d"
 5)  "g"
 6)  "a"
 7)  "c"
test:2>

sdiff key1 key2 key3
返回key1与key2 key3的差集,即key1-key2-key3
test:2>sdiff sur1 sur2 sur3
 1)  "d"
test:2>

2.5、Redis 有序集合 (Sorted sets)

zadd key score1 value1 score2 value2 ..
添加元素
test:3>zadd age 1 a 2 b 3 c 4 d
"4"

zrange key 0 -1
查看key所有元素

zrem key value1 value2 ..
删除集合中的元素
test:3>zrem age d
"1"
test:3>zrange age 0 -1
 1)  "a"
 2)  "b"
 3)  "c"
test:3>

zremrangebyscore key min max
按照socre来删除元素,删除score在[min,max]之间的
test:3>zrange age 0 -1
 1)  "a"
 2)  "b"
 3)  "c"
 4)  "d"
 5)  "e"
 6)  "f"
test:3>zremrangebyscore age 2 3
"2"
test:3>zrange age 0 -1
 1)  "a"
 2)  "d"
 3)  "e"
 4)  "f"
test:3>

zremrangebyrank key start end
按排名删除元素,删除名次在[start,end]之间的
test:3>zrange age 0 -1
 1)  "a"
 2)  "d"
 3)  "e"
 4)  "f"
test:3>zremrangebyrank age 0 1
"2"
test:3>zrange age 0 -1
 1)  "e"
 2)  "f"
test:3>

zrank key member
查询member的排名(升续 0名开始)
test:3>zrange age 0 -1
 1)  "a"
 2)  "b"
 3)  "c"
 4)  "d"
 5)  "e"
 6)  "f"
test:3>zrank age d
"3"

zrevrank key memeber
查询 member的排名(降续 0名开始)
test:3>zrange age 0 -1
 1)  "a"
 2)  "b"
 3)  "c"
 4)  "d"
 5)  "e"
 6)  "f"
test:3>zrank age d
"3"
test:3>zrevrank age e
"1"

zrange key start stop [WITHSCORES]
把集合排序后,返回名次[start,stop]的元素
默认是升续排列 
Withscores 是把score也打印出来
test:3>zrange age 2 3
 1)  "c"
 2)  "d"
test:3>zrange age 2 3 withscores
 1)  "c"
 2)  "3"
 3)  "d"
 4)  "4"
 
zrevrange key start stop
作用:把集合降序排列,取名字[start,stop]之间的元素
test:3>zrevrange age 1 2
 1)  "e"
 2)  "d"
test:3>zrevrange age 1 2 withscores
 1)  "e"
 2)  "5"
 3)  "d"
 4)  "4"
 
 zrangebyscore  key min max [withscores] limit offset N
作用: 集合(升续)排序后,取score在[min,max]内的元素,
并跳过 offset个, 取出N个
test:3>zrange age 0 -1
 1)  "a"
 2)  "b"
 3)  "c"
 4)  "d"
 5)  "e"
 6)  "f"
test:3>zrange age 0 -1 withscores
 1)  "a"
 2)  "1"
 3)  "b"
 4)  "2"
 5)  "c"
 6)  "3"
 7)  "d"
 8)  "4"
 9)  "e"
 10)  "5"
 11)  "f"
 12)  "6"
test:3>zrangebyscore age 1 4 limit 1 2 withscores
 1)  "b"
 2)  "2"
 3)  "c"
 4)  "3"
test:3>

zcard key
返回元素个数

zcount key min max
返回[min,max] 区间内元素的数量
test:3>zcount age 1 5
"5"

zinterstore destination numkeys key1 [key2 ...] 
[weights weight [weight ...]] 
[aggregate SUM|MIN|MAX]
求key1,key2的交集,key1,key2的权重分别是 weight1,weight2
聚合方法用: sum |min|max
聚合的结果,保存在dest集合内
注意: weights ,aggregate如何理解?
答: 如果有交集, 交集元素又有socre,score怎么处理?
 Aggregate sum->score相加   , min 求最小score, max 最大score
另: 可以通过weigth设置不同key的权重, 交集时,socre * weights
test:3>zadd s1 1 a 2 b 3 c 4 d
"4"
test:3>zadd s2 2 a 4 b 5 e 6 g
"4"
test:3>zinterstore dest 2 s1 s2
"2"
test:3>zrange dest 0 -1
 1)  "a"
 2)  "b"
test:3>zrange dest 0 -1 withscores
 1)  "a"
 2)  "3"
 3)  "b"
 4)  "6"
test:3>zinterstore dest 2 s1 s2 aggregate sum
"2"
test:3>zrange dest 0 -1 withscores
 1)  "a"
 2)  "3"
 3)  "b"
 4)  "6"
test:3>zinterstore dest 2 s1 s2 aggregate min
"2"
test:3>zrange dest 0 -1 withscores
 1)  "a"
 2)  "1"
 3)  "b"
 4)  "2"
test:3>zinterstore dest 2 s1 s2 aggregate max
"2"
test:3>zrange dest 0 -1 withscores
 1)  "a"
 2)  "2"
 3)  "b"
 4)  "4" 
test:3>zinterstore dest 2 s1 s2 weights 2 1 aggregate sum
"2"
test:3>zrange dest 0 -1 withscores
 1)  "a"
 2)  "4"
 3)  "b"
 4)  "8"  

2.6、Redis 哈希/散列 (Hashes)

hset key field value
作用: 把key中 filed域的值设为value
注:如果没有field域,直接添加,如果有,则覆盖原field域的值
test:4>hset user username lisi
"1"
test:4>hset user age 28
"1"
test:4>hset user gender male
"1"

hmset key field1 value1 [field2 value2 field3 value3 ......fieldn valuen]
作用: 设置field1->N 个域, 对应的值是value1->N
test:4>hmset user username zhangsan age 30 gender female
"OK"
test:4>

hget key field
作用: 返回key中field域的值
test:4>hget user username
"zhangsan"
test:4>

hmget key field1 field2 fieldN
作用: 返回key中field1 field2 fieldN域的值
test:4>hmget user username age gender
 1)  "zhangsan"
 2)  "30"
 3)  "female"
test:4>

hgetall key
作用:返回key中,所有域与其值
test:4>hgetall user
 1)  "username"
 2)  "zhangsan"
 3)  "age"
 4)  "30"
 5)  "gender"
 6)  "female"
test:4>

hdel key field
作用: 删除key中 field域
test:4>hdel user age
"1"
test:4>hgetall user
 1)  "username"
 2)  "zhangsan"
 3)  "gender"
 4)  "female"
test:4>

hlen key
作用: 返回key中元素的数量
test:4>hlen user
"2"
test:4>

hexists key field
作用: 判断key中有没有field域
test:4>hexists user username
"1"
test:4>hexists user age
"0"
test:4>


hinrby key field value
作用: 是把key中的field域的值增长整型值value
test:4>hincrby user age 1
"21"
test:4>

hincrbyfloat  key field value
作用: 是把key中的field域的值增长浮点值value
test:4>hincrbyfloat user age 0.5
"21.5"
test:4>

hkeys key
作用: 返回key中所有的field
test:4>hkeys user
 1)  "username"
 2)  "gender"
 3)  "age"
test:4>

kvals key
作用: 返回key中所有的value
test:4>hvals user
 1)  "zhangsan"
 2)  "female"
 3)  "21.5"
test:4>

0 0
原创粉丝点击