Redis操作手册
一、Redis简介
1.概述
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
常见[NoSQL]数据库:
列存储:Hbase、Cassandra、Hypertable
文档存储:MongoDB、CouchDB
k-v存储:TokyoCabinet、BerkeleyDB、MemcacheDB、redis
对象存储:Neo4J、Versant
Xml数据库:BerkeleyDB、BaseX
计算机的五大部件:控制器(cpu)、计算器(cpu)、输入输出设备(IO)、存储设备(硬盘、内存)
2.Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
3.Redis 优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
4.Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
二、redis的安装
参考下载网站:http://redis.cn/download.html
1.windows系统下安装redis
①可执行文件:按照提示安装
②zip包:解压缩,配置路径,将bi目录的路径放置到path中。
③启动redis:打开命令行切换到redis.conf文件所在路径,通过redis-server ./redis.windows.conf启动,redis-cli 进入redis
2.Linux系统下安装redis
①apt / apt-get install redis-server
②下载zip压缩包,上传到linux系统,解压压缩包,使用make命令编译redis源代码(c++),等待结束后,使用make install 命令 ,安装编译后的文件。使用redis-server ./redis.conf (当前路径)启动 。使用vim 命令修改配置文件,vim redis.conf文件,将bind 127.0.0.1注释掉,/daemomize no 修改为yes,(后台进程、守护进程),保存退出,重启服务,sudo service redis-server restart
登录:先输入命令redis-server ./redis.conf ,启动redis,然后输入redis-cli 登录。
三、常见的redis命令
参考文档链接:http://redis.cn/commands.html
1.数据类型为字符串:数据的CRUD(增删改查)
①给某个key追加数据:append key value
如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。
返回值integer reply:返回append后字符串值(value)的长度。
例如:
redis> EXISTS mykey
(integer) 0
redis> APPEND mykey "Hello"
(integer) 5
redis> APPEND mykey " World"
(integer) 11
redis> GET mykey
"Hello World"
②获取某个key的值:GET key
返回key的value。如果key不存在,返回特殊值nil。如果key的value不是string,就返回错误,因为GET只处理string类型的values。
返回值simple-string-reply:key对应的value,或者nil(key不存在时)
例子
redis> GET nonexisting
(nil)
redis> SET mykey "Hello"
OK
redis> GET mykey
"Hello"
③同时设置多个k-v值:MSET key value [key value ...]
对应给定的keys到他们相应的values上。MSET会用新的value替换已经存在的value,就像普通的SET命令一样。如果你不想覆盖已经存在的values,请参看命令MSETNX。
MSET是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。
返回值simple-string-reply:总是OK,因为MSET不会失败。
例子
redis> MSET key1 "Hello" key2 "World"
OK
redis> GET key1
"Hello"
redis> GET key2
"World"
④获取多个key的值:MGET key [key ...]
返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil。正因为此,这个操作从来不会失败。
返回值
array-reply: 指定的key对应的values的list
例子
redis> SET key1 "Hello"
OK
redis> SET key2 "World"
OK
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
⑤获取指定key值的长度:STRLEN key
返回key的string类型value的长度。如果key对应的非string类型,就返回错误。
返回值
integer-reply:key对应的字符串value的长度,或者0(key不存在)
例子
redis> SET mykey "Hello world"
OK
redis> STRLEN mykey
(integer) 11
redis> STRLEN nonexisting
(integer) 0
⑥设置key的值:SET key value [EX seconds] [PX milliseconds] [NX|XX]
将键key设定为指定的“字符串”值。如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。当set命令执行成功之后,之前设置的过期时间都将失效
选项
从2.6.12版本开始,redis为SET命令增加了一系列选项:
EX seconds – Set the specified expire time, in seconds.
PX milliseconds – Set the specified expire time, in milliseconds.
NX – Only set the key if it does not already exist.
XX – Only set the key if it already exist.
EX seconds – 设置键key的过期时间,单位时秒
PX milliseconds – 设置键key的过期时间,单位时毫秒
NX – 只有键key不存在的时候才会设置key的值
XX – 只有键key存在的时候才会设置key的值
注意: 由于SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。
返回值
simple-string-reply:如果SET命令正常执行那么回返回OK,否则如果加了NX 或者 XX选项,但是没有设置条件。那么会返回nil。
例子
redis> SET mykey "Hello"
OK
redis> GET mykey
"Hello"
⑦关于值为数字时对值的修改,增加1或增加指定数字,减去1或减去指定数字
2.数据类型为hash
①设置/获取键值对,hset/hget key field value
(key相当于表名或者一个对象,field相当于字段或者属性)
②获取hash对象中所有的字段,hkeys key
③获取hash对象所有字段的数量,hlen key
④获取hash对象中指定字段的值,hmget key field【field......】
⑤获取hash对象中所有的域和值:hgetall key
⑥获取hashi对象所有域的值
⑦设置hash字段的值,设置一个:hset key value,设置多个:mhset key value 【key value】
3.数据类型为list
①从队列左边入队一个或多个元素:lpush key value【value,value...】
②设置队列中指定下标的值:lset key index value
③获取队列长度
④从队列左边出队一个元素
⑤获取对列指定起始和结束为止的元素列表:lrange key start end
⑥修剪指定范围元素:ltrim key start end
4.keys操作
①查询指定key是否存在:exists key【key key ...】
返回0表示不存在,1表示存在
②为某个key设置有效时间:expire key seonds
③查询某个key的有效时间:ttl key
返回值为-2表示已经失效,-1表示永久有效,2,3,4等表示剩余有效时间
④移除某个key的有效时间:persist key