NoSQL学习笔记之——Redis基础
Posted 数据小魔方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NoSQL学习笔记之——Redis基础相关的知识,希望对你有一定的参考价值。
之前练习过一篇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语言:
#下载/加载接口扩展包:
install.packages("rredis")
library("rredis")
#建立/断开连接
redisConnect() redisClose()
字符串读写(Strings)
字符串时redis中最简单的数据结构,一个key对应一个value。
redisSet("name1", "raindu") #写入
'OK'
redisGet("name1") #读取
'raindu'
redisSet("num1", 11) #写入
'OK'
redisGet("num1") #读取
11
字符串中也可以写入一个向量对象(或者数据框对象),在redis中会被存为二进制序列的value对象。
redisSet("vector1", 10:15)
'OK'
redisGet("vector1")
10 11 12 13 14 15
redisSet("mtcars_head", head(mtcars,5))
'OK'
redisGet("mtcars_head")
redisMSet(list(x='cat',y='dog',z=100)) #批量插入:
redisMGet(c('x','y','z')) #批量读取
队列操作:(list)
#从数组左边插入数据
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类型操作
#写入元组元素:
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)
#写入hash表:参数依次是哈希表表名、键——值
redisHSet("animals", "cat", "Garfield") redisHSet("animals", "dog", "Husky") redisHSet("animals", "pig", "Peppa") redisHSet("animals", "bear","TOM'S") redisHSet("animals", "duck", "Donald")
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")) #通过提供一个列表来设置多个字段的值
redisHGetAll("animals") #查看animals结构
$cat
'Garfield'
$dog
'Husky'
$pig
'Peppa'
$bear
'TOM\'S'
$duck
'Donald'
$lion
'The Lion King'
$tiger
'big tiger'
redisExists("name1") #查看对象是否存在
TRUE
redisDelete("name1") redisExists("name1")
FALSE
以上是在R语言中读写string、set、list、hash数据结构对象的简单步骤,虽然现在还不了解redis的更深入应用场景,但是相信早些了解这些NoSQL产品的简单使用,可以为今后的数据技能鉴定基础。
Python:
import redis #导入redis库:
r = redis.Redis(host=’localhost’,port=6379,db=0) #建立连接
基本数据类型操作:
#字符串操作(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
#批量获取值:
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):
r.lpush("animals","cat") r.lpush("animals","dog","pig","tiger")
#保存在列表中的顺序为tiger,pig,cat,dog
r.rpush("animals","bear")
#添加到列表的最右边
# 在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
r.llen("animals")
#animals对应的list元素的个数
7
r.lset( name = "animals", index = 2, value = "chicken" )
True
#对list中的某一个索引位置重新赋值
#删除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)
#name对应的hash中设置一个键值对
r.hset( name = "animals", key = "cat", value = "Garfield" )
#在name对应的hash中批量设置键值对,mapping:字典
r.hmset( name = "animals", mapping = {"dog":"Husky","pig":"Peppa","bear":"TOM\'S","duck":"Donald","lion":"The Lion King","tiger":"big tiger"} )
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'}
# 在animals对应的hash中获取多个key的值
r.hmget("animals",["cat","dog","duck"]) r.hmget("animals","cat","dog","duck") [b'Garfield', b'Husky', b'Donald']
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 操作
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
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'}
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)
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基本数据类型的主要基础函数,更为高阶的内容以及应用以后深入学习之后再分享。
欢迎关注魔方学院交流群:
以上是关于NoSQL学习笔记之——Redis基础的主要内容,如果未能解决你的问题,请参考以下文章