redis常用命令

最近学习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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 1、String类型:存储的数据都是string类型的 1、set name fangzy //设置值 name...
    fangzy0723阅读 318评论 0 0
  • 查看当前所有的KEY KEYS *KEYS zhang* #查看前缀为zhang的所有键; 查看当前redis...
    Zhang21阅读 10,283评论 0 3
  • Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端...
    OzanShareing阅读 511评论 0 2
  • 我家男女一比一 to 多多 4个月前,深夜11点,其实过了12点,你就刚好37周了,理论上来说算是一个足月宝宝了,...
    清风尤灵阅读 516评论 0 50
  • 今夜又下起了雨,窗外的雨声淅淅沥沥的,而屋内却十分的燥热。或许是屋内的人的内心太不平静了吧。 夜晚,是一个适合码字...
    Miss夏晚阅读 183评论 0 0