NoSQL学习笔记之——Redis基础

2018-04-12 10:49:16 浏览数 (1)

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

0 人点赞