前言
启动服务器
启动客户端
数据操作
(string,键命令,hash,list)
(set,zset,发布订阅,主从配置)
与python交互
前言
作为跟MongoDB同属NoSQL阵营的Redis,也具有类似的“直爽快”特性。它本身读取速度快,又提供丰富的数据结构,避免程序员重复造轮子。大名鼎鼎的分布式scrapy也是基于redis,所以赶紧了解一下呗!
启动服务器
建议指定配置文件的方式启动,我的配置文件所在路径: /etc/redis/redis-server.conf 就不知道你们的是不是啦
启动方式:redis-server /etc/redis/redis-server.conf
启动客户端进入命令行:redis-cli
退出客户端:exit
数据操作
redis是key-value的数据,key的类型是字符串,value类型可以是:string,hash,list,set,zset
string
最基本类型,最大存储512M数据,可存储任何数据:数字,图片,序列化对象等设置键值:set key value
也可以一次设置多个数据:mset key1 value1 key2 value2 key3 value3…
获取键值:get key;也可以一次获取多个键值:mget key1 key2 key3…
如果不存在,返回nil甚至还能追加键值:append key value
也可以获取键值长度(有点像C语法哇):strlen key
也可以在设置键值的时候设置过期时间:setex key seconds value
运算(键值要求为数值):incr key 键值+1;incrby key increment 键值指定+increment ;相对应的就有decr key 键值-1,decrby key increment 指定-increment
键命令
(不仅仅针对于string类型,其他value类型的key都适用)查找键:keys pattern(支持正则),所以查看全部键可以是keys *
查看键是否存在:exists key,存在返回1,不存在返回0
也可以一次查询多个键:exists key1 key2 …,返回值为总和
查看键的类型:type key
删除键:del key,成功返回1,失败或键不存在返回0;或者删除多个键:del key1 key2 …,返回值为总和,即便键不存在,亦不会报错
设置过期时间:expire key seconds;查看键的剩余存活时间:ttl key
expire操作后返回1表示设置成功,返回0表示设置失败或是键不存在,设置时间单位秒;ttl操作后返回剩余存货时间,如果返回-2表示键不存在,如果返回-1代表永久存在当然,也能清除过期时间:persist key
如果persit操作之后返回1表示操作成功;如果返回0,键不存在或键本身就是永久
hash
用于存储对象,对象格式为键值对hset key field value / hmset key field1 value1 field2 value2 …,如何理解"对象"呢?即:一个人,这就是一个对象,有名字,年龄,性别等
hget key field / hmget key field1 field2 …
获取指定key的所有字段和值: hgetall key
获取指定key的所有字段:hkeys key
获取指定key的所有值:hvals key
获取指定key的字段个数:hlen key
判断key的字段是否存在:hexists key field,存在返回1,不存在返回0
删除字段及对应值:hdel key field / hdel key field1 field2 …
删除key:del key
获取值的字符串长度:hstrlen key field 我查了使用文档,的确存在这个hstrlen命令,用Tab命令提示也能自动弹出来,但是——
list
列表的元素类型是string,按照插入顺序排序,可列表的头或尾添加元素从头/尾部插入:lpush/rpush key value,每次返回的值是列表中的元素个数
在一个元素的前/后插入元素:linsert key before/after pivot value,这里的支点(pivot)就是原列表中的元素,value则是需要新添加的元素
失败则返回-1移除并获得值:lpop/rpop key,这里可以用python的list类型的pop方法来理解
利用索引获取元素:lindex key index
获取key的长度(也就是列表中的元素个数):llen key
修改列表中的元素值:lset key index value,指定元素在列表中的索引(index),value是修改后的内容。==如果index值上并不存在元素,报索引错误==
返回指定范围的元素:lrange key startIndex stopIndex
超出索引范围不报错裁剪列表:ltrim key startIndex stopIndex
set
无序集合,元素类型string,元素具有唯一性,不重复添加元素:sadd key member;或者一次添加多个:sadd key member1 member2 …,如果添加的元素已存在,返回0
移除元素:srem key member / srem key member1 member2 …
获取所有元素:smembers key
获取集合元素个数:scard key
求多个集合的交集:sinter key1 key2 …
求集合与其他集合的差集:sdiff key1 key2 …
求多个集合的合集:sunion key1 kye2 …
判断元素是否在集合中:sismember key member,存在返回1,不存在返回0
zset
有序集合,唯一性,每个元素都会关联到一个double类型的score,表示权重,根据权重对元素排序,元素的score可以相同zadd key score member;zadd key socre1 member1 score2 member2 …
zrem key member/zrem key member1 member2 …
zrange key start stop
zcard key
统计score值在min与max的个数:zcount key min max
返回member的score值:zscore key member
发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。消息格式:
a. subscribe 频道名1 [频道名2 …] 订阅
b. unsubscribe 频道名1 [频道名2 …] 退订
c. message之后显示频道,再之后显示正文
d. publish 频道 消息 发布
发布消息
接受消息
主从配置
每个主都可以设置许多的从,每个从又可以设置许多的从;通过设置主从,搭建分布式,如scrapy-redis分布式爬虫对主机修改配置文件:bind 主机Ip
对从机修改配置文件:
bind 从机Ip
slaveof 主机Ip port
与python交互安装包redis,导入:import redis
连接redis:r = redis.StrictRedis(host="hostname", prot=6379)
使用方法1:根据数据类型,使用对应方法,如:r.set("name", "kaihui") / r.get("name")
使用方法2:
p = r.pipeline()
p.set(…)
p.get(…)
p.execute()
法2缓冲多条命令,然后一次性执行,减少服务器-客户端之间TCP数据库包,从而提高效率
之前在redis客户端操作的命令,都很好的封装到了连接数据库的对象里,可以直接使用,如:r.hset() r.sadd()…