之前练习过一篇NoSQL之Mongodb基础的笔记,这一篇开始练习NoSQL系列的又一重要利器——Redis。
Redis是一个开源的,基于内存并可持久化的日志型、Key-Value数据库,提供多种语言的API,是对传统关系型数据库的重要补充。
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
在开始介绍之前,请先确保系统环境中已经安装了redis、RedisDesktopManager并开启redis服务。
R语言(rredis)和Python(redis)都有扩展包接口与桌面redis客户端环境交互。
R语言:
代码语言:javascript复制#下载/加载接口扩展包:
install.packages("rredis")
library("rredis")
代码语言:javascript复制#建立/断开连接
redisConnect()
redisClose()
字符串读写(Strings)
字符串时redis中最简单的数据结构,一个key对应一个value。
代码语言:javascript复制redisSet("name1", "raindu") #写入
'OK'
redisGet("name1") #读取
'raindu'
redisSet("num1", 11) #写入
'OK'
redisGet("num1") #读取
11
字符串中也可以写入一个向量对象(或者数据框对象),在redis中会被存为二进制序列的value对象。
代码语言:javascript复制redisSet("vector1", 10:15)
'OK'
redisGet("vector1")
10 11 12 13 14 15
redisSet("mtcars_head", head(mtcars,5))
'OK'
redisGet("mtcars_head")
代码语言:javascript复制redisMSet(list(x='cat',y='dog',z=100)) #批量插入:
redisMGet(c('x','y','z')) #批量读取
队列操作:(list)
代码语言:javascript复制#从数组左边插入数据
redisLPush('quene1',1)
redisLPush('quene1',2)
redisLPush('quene1',3)
'1'
'2'
'3'
redisLRange('quene1',0,2) #显示从列表左边0-2的数据
(redis中的索引从0开始)
3
2
1
redisLPop('quene1') #从列表左边删除一个数据
3
redisLRange('quene1',0,-1) #显示从列表左边0-(-1)的数据
2
1
redisRPush('quene1',0) #从列表右边插入数据
'3'
redisRPush('quene1',-1)
'4'
redisLRange('quene1',0,-1)
2
1
0
-1
redisRPop('quene1') #从列表右边删除一个数据
-1
SET类型操作
代码语言:javascript复制#写入元组元素:
redisSAdd('SET1',"A")
'1'
redisSAdd('SET1',"B")
'1'
redisSCard('SET1') #显示对象有几个元素
'2'
redisSMembers('SET1') #显示set对象元素
'A'
'B'
redisSAdd('SET2',"B")
redisSAdd('SET2',"C")
redisSDiff(c('SET1','SET2')) #差集
'A'
redisSInter(c('SET1','SET2')) #交集
'B'
redisSUnion(c('SET1','SET2')) #并集
'C'
'A'
'B'
哈希表(hash)
代码语言:javascript复制#写入hash表:参数依次是哈希表表名、键——值
redisHSet("animals", "cat", "Garfield")
redisHSet("animals", "dog", "Husky")
redisHSet("animals", "pig", "Peppa")
redisHSet("animals", "bear","TOM'S")
redisHSet("animals", "duck", "Donald")
代码语言:javascript复制redisHGet("animals", "cat") #哈希映射值
'Garfield'
redisHGetAll("animals") #哈希映射结构
$cat
'Garfield'
$dog
'Husky'
$pig
'Peppa'
$bear
'TOM'S'
$duck
'Donald'
redisHKeys("animals") #哈希表映射的键
'cat'
'dog'
'pig'
'bear'
'duck'
redisHVals("animals") #取出哈希表映射中所有的值
'Garfield'
'Husky'
'Peppa'
'TOM'S'
'Donald'
redisHLen("animals") #取出哈希表映射中字段数量
'5'
redisHMGet("animals", c("cat", "dog","pig")) #一次性取出多个字段的值
$cat
'Garfield'
$dog
'Husky'
$pig
'Peppa'
redisHMSet("animals", list("lion" = "The Lion King", "tiger" = "big tiger"))
#通过提供一个列表来设置多个字段的值
代码语言:javascript复制redisHGetAll("animals") #查看animals结构
$cat
'Garfield'
$dog
'Husky'
$pig
'Peppa'
$bear
'TOM'S'
$duck
'Donald'
$lion
'The Lion King'
$tiger
'big tiger'
代码语言:javascript复制redisExists("name1") #查看对象是否存在
TRUE
redisDelete("name1")
redisExists("name1")
FALSE
以上是在R语言中读写string、set、list、hash数据结构对象的简单步骤,虽然现在还不了解redis的更深入应用场景,但是相信早些了解这些NoSQL产品的简单使用,可以为今后的数据技能鉴定基础。
Python:
代码语言:javascript复制import redis #导入redis库:
r = redis.Redis(host=’localhost’,port=6379,db=0) #建立连接
基本数据类型操作:
代码语言:javascript复制#字符串操作(String):
r.set(‘name1’, ‘raindu’) #添加
True
r.get(‘name1’) #获取
b’raindu’
#批量设置值
r.mset(name2=’liming’, name3= ‘lihua’) #直接以键值对形式输入
True
#批量获取键值对:
r.mset({“name4”:’leifeng’, “name5”:’geming’})
True
代码语言:javascript复制#批量获取值:
r.mget(“name1”,”name2”,”name3”,”name4”,”name5”)
[b’raindu’, b’liming’, b’lihua’, b’leifeng’, b’geming’]
r.mget([“name1”,”name2”,”name3”,”name4”,”name5”])
[b’raindu’, b’liming’, b’lihua’, b’leifeng’, b’geming’]
列表操作(list):
代码语言:javascript复制r.lpush("animals","cat")
r.lpush("animals","dog","pig","tiger")
#保存在列表中的顺序为tiger,pig,cat,dog
r.rpush("animals","bear")
#添加到列表的最右边
代码语言:javascript复制# 在animals对应的列表的某一个值前或后插入一个新值
r.linsert(
name = "animals",
where = "BEFORE",
refvalue = "dog",
value = "duck"
)
#在列表内找到第一个元素dog,在它前面插入duck
r.linsert(
name = "animals",
where = "AFTER",
refvalue = "dog",
value = "monkey"
)
#在列表内找到第一个元素dog,在它后面插入monkey
代码语言:javascript复制r.llen("animals")
#animals对应的list元素的个数
7
r.lset(
name = "animals",
index = 2,
value = "chicken"
)
True
#对list中的某一个索引位置重新赋值
代码语言:javascript复制#删除name对应的list中的指定值
r.lrem(
name = "animals",
value = "chicken",
num=0
)
r.lpop("animals")
#移除列表的左侧第一个元素,并返回被移除的元素
b'tiger'
r.lindex("animals",1) #根据索引获取列表内元素
b'dog'
r.lrange("animals",0,-1) #分片获取元素
[b'pig', b'dog', b'monkey', b'cat', b'bear']
哈希操作(Hash)
代码语言:javascript复制#name对应的hash中设置一个键值对
r.hset(
name = "animals",
key = "cat",
value = "Garfield"
)
代码语言:javascript复制#在name对应的hash中批量设置键值对,mapping:字典
r.hmset(
name = "animals",
mapping = {"dog":"Husky","pig":"Peppa","bear":"TOM'S","duck":"Donald","lion":"The Lion King","tiger":"big tiger"}
)
代码语言:javascript复制r.hget("animals","cat") #获取animals对应hash的制定键值对
b'Garfield'
r.hgetall("animals") #获取animals对应hash的所有键值
{b'bear': b"TOM'S", b'cat': b'Garfield', b'dog': b'Husky', b'duck': b'Donald', b'lion': b'The Lion King', b'pig': b'Peppa', b'tiger': b'big tiger'}
代码语言:javascript复制# 在animals对应的hash中获取多个key的值
r.hmget("animals",["cat","dog","duck"])
r.hmget("animals","cat","dog","duck")
[b'Garfield', b'Husky', b'Donald']
代码语言:javascript复制r.hlen("animals") #获取hash中键值对的个数
7
r.hkeys("animals") #获取hash中所有的key的值
[b'cat', b'dog', b'pig', b'bear', b'duck', b'lion', b'tiger']
r.hvals("animals") #获取hash中所有的value的值
[b'Garfield', b'Husky', b'Peppa', b"TOM'S", b'Donald', b'The Lion King', b'big tiger']
r.hexists("animals","cat") #检查name对应的hash是否存在当前传入的key
True
r.hdel("animals","cat") #删除指定name对应的key所在的键值对
Set 操作
代码语言:javascript复制r.sadd("anmials","cat") #给anmials对应的集合中添加元素
r.sadd("anmials","dog","pig")
r.smembers("anmials") #获取anmials对应的集合的所有成员
{b'cat', b'dog', b'pig'}
r.scard("anmials") #获取anmials对应的集合中的元素个数
3
代码语言:javascript复制r.sadd("anmials2","duck","chieken","tiger","dog","pig")
r.sdiff("anmials","anmials2","set_name2") #差集
{b'cat'}
r.sinter("anmials","anmials2") #交集
{b'dog', b'pig'}
r.sunion("anmials","anmials2") #并集
{b'cat', b'chieken', b'dog', b'duck', b'pig', b'tiger'}
代码语言:javascript复制r.sismember("anmials","cat") #检查value是否是name对应的集合内的元素
True
r.spop("anmials") #从集合的右侧移除一个元素,并将其返回
b'dog'
r.srandmember("anmials",2) #从anmials对应的集合中随机获取numbers个元素
[b'cat', b'pig']
r.srem("anmials","cat") #删除anmials对应的集合中的某些值
有序元组(Ordered set)
代码语言:javascript复制r.zadd("anmials3","cat",5, "dog",3, "duck",4,"tiger",6,"chicken",2,"bear",1)
# 在anmials3对应的有序集合中添加元素
r.zadd('anmials3', lion=8, monkey=9)
r.zcard("anmials3")
#获取有序集合内元素的数量
8
r.zcount("anmials3",1,5)
#获取有序集合中分数在[min,max]之间的个数
5
r.zscore("anmials3","dog")
#获取anmials3对应有序集合中 value 对应的分数
3.0
r.zrem("anmials3","cat","dog")
#删除name对应的有序集合中值是values的成员
r.zscan("anmials3")
(0,
[(b'bear', 1.0),
(b'chicken', 2.0),
(b'duck', 4.0),
(b'tiger', 6.0),
(b'lion', 8.0),
(b'monkey', 9.0)])
以上便是Python中操作redis基本数据类型的主要基础函数,更为高阶的内容以及应用以后深入学习之后再分享。