Python——redis操作手册

时间:2024-03-13 07:17:13

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 登录。

Python——redis操作手册

三、常见的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"

Python——redis操作手册

②获取某个key的值:GET key

返回keyvalue。如果key不存在,返回特殊值nil。如果keyvalue不是string,就返回错误,因为GET只处理string类型的values

返回值simple-string-reply:key对应的value,或者nilkey不存在时)

例子

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)

Python——redis操作手册

⑤获取指定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

Python——redis操作手册

⑥设置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命令加上选项已经可以完全取代SETNXSETEXPSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。

返回值

simple-string-reply:如果SET命令正常执行那么回返回OK,否则如果加了NX 或者 XX选项,但是没有设置条件。那么会返回nil。

例子

redis> SET mykey "Hello"

OK

redis> GET mykey

"Hello"

Python——redis操作手册

⑦关于值为数字时对值的修改,增加1或增加指定数字,减去1或减去指定数字

Python——redis操作手册

2.数据类型为hash

①设置/获取键值对,hset/hget  key  field value

(key相当于表名或者一个对象,field相当于字段或者属性)

Python——redis操作手册

②获取hash对象中所有的字段,hkeys key

③获取hash对象所有字段的数量,hlen key

Python——redis操作手册

④获取hash对象中指定字段的值,hmget key field【field......】

Python——redis操作手册

⑤获取hash对象中所有的域和值:hgetall key

⑥获取hashi对象所有域的值

Python——redis操作手册

⑦设置hash字段的值,设置一个:hset key value,设置多个:mhset key value 【key value】

Python——redis操作手册

3.数据类型为list

①从队列左边入队一个或多个元素:lpush key value【value,value...】

Python——redis操作手册

②设置队列中指定下标的值:lset key index value

Python——redis操作手册

③获取队列长度

④从队列左边出队一个元素

Python——redis操作手册

⑤获取对列指定起始和结束为止的元素列表:lrange key start end

Python——redis操作手册

⑥修剪指定范围元素:ltrim key start end


Python——redis操作手册

4.keys操作

①查询指定key是否存在:exists key【key key ...】

返回0表示不存在,1表示存在

Python——redis操作手册

②为某个key设置有效时间:expire  key seonds

③查询某个key的有效时间:ttl key

返回值为-2表示已经失效,-1表示永久有效,2,3,4等表示剩余有效时间

④移除某个key的有效时间:persist key

Python——redis操作手册