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基本数据类型的主要基础函数,更为高阶的内容以及应用以后深入学习之后再分享。

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2018-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏轮子工厂

5. 很“迷”的字符与字符串

最近一直在为自己的浏览量而担忧啦,都快被厂长大人约谈了……我真的有尽力在写稿子哦,所以也请各位老铁,如果觉得我的文章还不错就转发到朋友圈或者微信群之类的,让更多...

13220
来自专栏swag code

文件夹内信息输出-File类方法应用

获取文件列表数组方法 获取文健方法 获取文件的大小方法 获取文件最后修改时间方法 判断是否文件或是否文件夹方法

12250
来自专栏C/C++基础

2018腾讯内部调岗面试试题1——使用C/C++但不能用sizeof判断操作系统是32位还是64位

2018上半年折腾了一回,想换个后台开发岗尝试锻炼一下自己,面了三个部门,将有关有意思的题目汇总记录下来,供大家参考。

13010
来自专栏java相关

【PL/SQL编程基础】

13640
来自专栏Fundebug

ES6之Spread Operater拷贝对象

13440
来自专栏我是业余自学C/C++的

redis_3.0.7_sds.c_sdsempty_so_on

11030
来自专栏崔庆才的专栏

Python 3 中 Redis 的用法

在本节我们介绍一下 Python 的 Redis 操作,在本节开始之前请确保你已经安装好了 Redis 及Python Redis 库。Redis 库提供两个类...

2.1K10
来自专栏编程

Python入门白皮书#P01 Lists

文档: 我们以Google Python Exercises作为练习素材。 参考对应的文档 https://developers.google.com/edu/...

20560
来自专栏Java帮帮-微信公众号-技术文章全总结

24(02)多线程锁,线程通讯,线程组,线程池,多线程三种方式,匿名内部类,定时器,设计模式,单例模式,Runtime

(6)多线程实现的第三种方案 package cn.itcast_09;(1) import java.util.concurrent.Callable; //...

49740
来自专栏用户2442861的专栏

Python基础学习笔记之(二)(华工大神)

         Python中每一个.py脚本定义一个模块,所以我们可以在一个.py脚本中定义一个实现某个功能的函数或者脚本,这样其他的.py脚本就可以调用...

12740

扫码关注云+社区

领取腾讯云代金券