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

NoSQL学习笔记之——Redis基础


以上是在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


NoSQL学习笔记之——Redis基础

r.rpush("animals","bear")              
#添加到列表的最右边

# 在animals对应的列表的某一个值前或后插入一个新值

r.linsert(     name = "animals",     where = "BEFORE",     refvalue = "dog",     value = "duck"      )  


NoSQL学习笔记之——Redis基础

 
#在列表内找到第一个元素dog,在它前面插入duck

r.linsert(     name = "animals",     where = "AFTER",     refvalue = "dog",     value = "monkey"      )    
#在列表内找到第一个元素dog,在它后面插入monkey


NoSQL学习笔记之——Redis基础


r.llen("animals")   
#animals对应的list元素的个数

7

r.lset(        name = "animals",        index = 2,        value = "chicken"       )
True


NoSQL学习笔记之——Redis基础


#对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基础的主要内容,如果未能解决你的问题,请参考以下文章

Redis_NoSQL入门学习笔记

系统学习redis之一——基础概念

Redis基础学习笔记

NOSql之redis的学习

tyro系列之三:Redis学习笔记

Redis学习笔记 [初识Redis,学习常用的5种数据类型]