Redis 命令

Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用。在编程时,比如使用Redis 的Java语言包,这些命令都有对应的方法。下面将Redis提供的命令做一总结。

官网命令列表:http://redis.io/commands (英文)

1、连接操作相关的命令

· quit:关闭连接(connection)

· auth:简单密码认证

2、对value操作的命令

· exists(key):确认一个key是否存在

· del(key):删除一个key

· type(key):返回值的类型

· keys(pattern):返回满足给定pattern的所有key

· randomkey:随机返回key空间的一个key

· rename(oldname, newname):将key由oldname重命名为newname,若newname存在则删除newname表示的key

· dbsize:返回当前数据库中key的数目

· expire:设定一个key的活动时间(s)

· ttl:获得一个key的活动时间

· select(index):按索引查询

· move(key, dbindex):将当前数据库中的key转移到有dbindex索引的数据库

· flushdb:删除当前选择数据库中的所有key

· flushall:删除所有数据库中的所有key

3、对String操作的命令

· set(key, value):给数据库中名称为key的string赋予值value

· get(key):返回数据库中名称为key的string的value

· getset(key, value):给名称为key的string赋予上一次的value

· mget(key1, key2,…, key N):返回库中多个string(它们的名称为key1,key2…)的value

· setnx(key, value):如果不存在名称为key的string,则向库中添加string,名称为key,值为value

· setex(key, time, value):向库中添加string(名称为key,值为value)同时,设定过期时间time

· mset(key1, value1, key2, value2,…key N, value N):同时给多个string赋值,名称为key i的string赋值value i

· msetnx(key1, value1, key2, value2,…key N, value N):如果所有名称为key i的string都不存在,则向库中添加string,名称key i赋值为value i

· incr(key):名称为key的string增1操作

· incrby(key, integer):名称为key的string增加integer

· decr(key):名称为key的string减1操作

· decrby(key, integer):名称为key的string减少integer

· append(key, value):名称为key的string的值附加value

· substr(key, start, end):返回名称为key的string的value的子串

4、对List操作的命令

· rpush(key, value):在名称为key的list尾添加一个值为value的元素

· lpush(key, value):在名称为key的list头添加一个值为value的 元素

· llen(key):返回名称为key的list的长度

· lrange(key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同)

· ltrim(key, start, end):截取名称为key的list,保留start至end之间的元素

· lindex(key, index):返回名称为key的list中index位置的元素

· lset(key, index, value):给名称为key的list中index位置的元素赋值为value

· lrem(key, count, value):删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。 lpop(key):返回并删除名称为key的list中的首元素 rpop(key):返回并删除名称为key的list中的尾元素 blpop(key1, key2,… key N, timeout):lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作。

· brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。

· rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部

5、对Set操作的命令

· sadd(key, member):向名称为key的set中添加元素member

· srem(key, member) :删除名称为key的set中的元素member

· spop(key) :随机返回并删除名称为key的set中一个元素

· smove(srckey, dstkey, member) :将member元素从名称为srckey的集合移到名称为dstkey的集合

· scard(key) :返回名称为key的set的基数

· sismember(key, member) :测试member是否是名称为key的set的元素

· sinter(key1, key2,…key N) :求交集

· sinterstore(dstkey, key1, key2,…key N) :求交集并将交集保存到dstkey的集合

· sunion(key1, key2,…key N) :求并集

· sunionstore(dstkey, key1, key2,…key N) :求并集并将并集保存到dstkey的集合

· sdiff(key1, key2,…key N) :求差集

· sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集保存到dstkey的集合

· smembers(key) :返回名称为key的set的所有元素

· srandmember(key) :随机返回名称为key的set的一个元素

6、对zset(sorted set)操作的命令

· zadd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。

· zrem(key, member) :删除名称为key的zset中的元素member

· zincrby(key, increment, member) :如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment

· zrank(key, member) :返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”

· zrevrank(key, member) :返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”

· zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素

· zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素

· zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素 zcard(key):返回名称为key的zset的基数 zscore(key, element):返回名称为key的zset中元素element的score zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素 zremrangebyscore(key, min, max) :删除名称为key的zset中score >= min且score <= max的所有元素

· zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。

7、对Hash操作的命令

· hset(key, field, value):向名称为key的hash中添加元素field<—>value

· hget(key, field):返回名称为key的hash中field对应的value

· hmget(key, field1, …,field N):返回名称为key的hash中field i对应的value

· hmset(key, field1, value1,…,field N, value N):向名称为key的hash中添加元素field i<—>value i

· hincrby(key, field, integer):将名称为key的hash中field的value增加integer

· hexists(key, field):名称为key的hash中是否存在键为field的域

· hdel(key, field):删除名称为key的hash中键为field的域

· hlen(key):返回名称为key的hash中元素个数

· hkeys(key):返回名称为key的hash中所有键

· hvals(key):返回名称为key的hash中所有键对应的value

· hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value

8、持久化

· save:将数据同步保存到磁盘

· bgsave:将数据异步保存到磁盘

· lastsave:返回上次成功将数据保存到磁盘的Unix时戳

· shundown:将数据同步保存到磁盘,然后关闭服务

9、远程服务控制

· info:提供服务器的信息和统计

· monitor:实时转储收到的请求

· slaveof:改变复制策略设置

· config:在运行时配置Redis服务器

RedisMemcached性能对比

虽然Memcached完全基于内存,而Redis具有持久化保存特性而且还是异步的,但经过测试Redis还是比Memcached快。
1) Libevent为了通用性使代码很庞大
2) CAS问题。CASMemcached中比较方便的一种防止竞争修改资源的方法。CAS实现需要为每个cache key设置一个隐藏的cas tokencas相当value版本号,每次settoken需要递增,因此带来CPU和内存的双重开销,虽然这些开销很小,但是到单机10G+ cache以及QPS上万之后这些开销就会给双方相对带来一些细微性能差别
Redis 可以通过虚拟内存的方式利用硬盘虚拟化出一块内存,将使用率不是太高的数据放入虚拟内存。
为了节约内存,建议使用hashset而不是set/get的方式来使用Redishashset可以把key复用,几个key-value放入一个key中,value再作为一个set存入)
3) Memcached使用libevent库,而Redis则原生的使用了epollkqueue等多个异步通信模型。使用snapshot(定时将内存的快照(snapshot)持久化到硬盘)代替aof (写入内存数据的同时将操作命令保存到日志文件)

特性

1) 数据类型:Redis可以存set,list,String,hash,sorted set等多种数据类型的数据

2) 排序: SORT key [asc] [alpha] [limit start count]
Lpush key1 12
Lpush key1 14
Sort key1
3) 计数: 有了原子递增,你可以放心的加上各种计数,用getset重置,或者是让他们过期
1. INCR user:<id> EXPIRE
2. User:<id> 60
可以计算出最近用户在各邮件停顿不超过60秒的邮件浏览量,当计数达到一个值时可以显示邮件的具体信息从而可以分析他想要找哪方面的信息。
实时分析正在发生的情况
统计在某段特定时间里有多少特定用户访问了某个特定资源,比如我想要知道某些特征用户或IP地址,他们有多少访问了某个邮件及访问的时间长度。 比如线次我获得一次新邮件浏览时可以使用此命令:
SADD email:day1:<email_id><user_id> day1也可用time()-(time()600*24) 替代
特定用户的数量: SCARD email:day1:<email_id>
测试某个特定用户是否访问了这个邮件: SISMEMBER email:day1:<email_id>

4) 事务:
Redis只能保证一个client 发起的事务中的命令可以连续的执行,中间不会插入其他client的命令,因为redis是单线程来处理所有client的请求所以很容易做到这一点。 一般是发来一个命令后立即处理并返回结果,但如果client发出multi命令后此连接会进入一个事务上下文,该连接后续命令会放到一个队列中,当发出exec命令后再顺序执行命令。
Ex: multi (OK) incr a (QUEUED) incr b (QUEUED) exec (1.(integer) 1 2.(integer) 2)

乐观锁:Watch 命令会监视给定的key,exec 时候如果监视的key从调用watch后发生过变化,则整个事务会失败
Watch a (OK) incr a (QUEUED) incr b (QUEUED) exec (nil)

5) 支持发布订阅: 订阅者可以通过subscribepsubscribe命令向redis订阅自己感兴趣的消息类型
持久化 (Snapshotting & Append-only file aof)
主从复制: 多个slave连到master, slave互连.
1) 主从复制不会阻塞master
2) 提高系统伸缩性,slave分别负责读请求,排序,数据冗余
3) 禁掉master上的数据持久化(save配置信息),转到某个slave来进行。
过程: 
1) master启动一个后台进程,将数据库快照保存到文件中,收集新的写命令并缓存,批量发送给slave
2) slave将文件保存到磁盘上然后加载到内存恢复快照到slave
3) master把缓存的命令转发给slave. (写一个文件将其发送给所有slave)

6) 虚拟内存:
将不经常访问的数据放到交换分区中

安装

Redis的安装不需要configuremake install
1. tar zxvf redis-version.tar.gz
2. cd redis-version
3. make
由于没有make install,所以得把源代码目录里的关键文件手动复制到适当的位置:
cp redis.conf /etc/ //唯一配置文件
cp redis-benchmark redis-cli redis-server /usr/bin/ //执行文件

make后生成以下几个文件:
redis-serverRedis服务器的daemon启动程序
redis-cliRedis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmarkRedis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-statRedis状态检测工具,可以检测Redis当前状态参数及延迟状况

运行

./redis-server /etc/redis.conf
./ redis-cli set key1 value1
./redis-cli get key1
立即保存到磁盘
./redis-cli save
验证是否启动成功:
ps -ef | grep redis 
关闭指定端口的redis-server
redis-cli -p 6380 shutdown

开放redis端口以供客户端连接
vi /etc/sysconfig/iptables
-A RH_firewall-1-INPUT –m state –state –state NEW –m tcp –p tcp –dport 6379 –j ACCEPT

Service iptables restart 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值