Redis数据类型

  • String:二进制安全,可以包含任何数据
  • Hash:一个键值(key=>value)对集合
  • List:简单的字符串列表
  • Set:string类型的无序集合
  • Zset:每个元素都会关联一个double类型的分数,redis通过分数来为集合中的成员进行从小到大的排序

Redis基本命令

  • Key: set, get, delete
  • Hash: hmset, hget, hdel
  • List: lpush, lindex
  • Set: sadd,smembers
  • Zset: zadd, zrange

具体用法可查看网上教程或官方文档或命令行提示

Redis持久化

  • Redis运行在内存中,但它同样提供了持久化机制
    • AOF:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集
    • RDB:生成数据集的时间点快照
  • 手动让Redis进行数据集保存:save
  • 打开AOF功能:修改配置文件 appendonly yes

Labwork

针对数据库第十次上机作业进行一些总结

作业要求是将以下两个json对象存入Redis

var  someexpert={
    id:10000
    realname: ‘expert-a’
    organization:’BUAA’
}

var  frameworks=[
    ‘vue’,
    ‘react’,
    ‘angular’
]

我在储存过程中全部是以python中的list形式转化为json进行储存的

初始化

在初始化前,我们首先需要在终端开启数据库,具体方法可以参考macOS上Redis的安装与测试

首先我们需要导入redis模块

import redis   # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库

直接pip安装即可

pip3 install redis

接下来就是初始化数据库了,host是redis主机使用localhost即可,需要redis服务端和客户端都启动,redis默认端口是6379

def __init__(self):
        self.host = 'localhost'
        self.port = '6379'
        self.r = redis.StrictRedis(host=self.host, port=self.port)

很多教程上写的是redis.Redis,然而官方是推荐使用redis.StrictRedis

redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

redis基本命令

  • 增加list

    lpush(name,values)

    name对应的list中添加元素,每个新的元素都添加到列表的最左边,没有就新建

  • 检查名字是否存在

    exists(name)

    检测redis的name是否存在,存在返回True,否则返回False

  • 删除

    delete(*names)

    根据删除redis中的任意数据类型(string、hash、list、set、有序set)

  • 列表长度

    llen(name)

    返回列表的长度。如果列表name不存在,则name被解释为一个空列表,返回0。如果name不是列表类型,返回一个错误。

  • 获取指定列表指定区间元素

    lrange(name, start, end)

    返回列表中指定区间内的元素。

    区间以偏移量startend指定。 其中0表示列表的第一个元素,1表示列表的第二个元素,以此类推;也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

参考代码

# -*- coding=utf-8 -*-
__author__ = 'XJX'
__date__ = '2018.06.09'

"""
description:
    将json对象存入Redis
"""

import json
import redis


class RedisTT(object):
    def __init__(self):
        self.host = 'localhost'
        self.port = '6379'
        self.r = redis.StrictRedis(host=self.host, port=self.port)

    def insertRedis(self, keyName, jsonStr):  # 存入到redis中
        self.r.lpush(keyName, jsonStr)


def save1():
    someexpert = {}
    someexpert['id'] = 10000
    someexpert['realname'] = 'expert-a'
    someexpert['organization'] = 'BUAA'
    if RedisTT().r.exists('someexpert'):
        RedisTT().r.delete('someexpert')  # 删除key为someexpert的键值对
    RedisTT().insertRedis(keyName='someexpert', jsonStr=json.dumps(someexpert))


def save2():
    frameworks = ['vue', 'react', 'angular']
    if RedisTT().r.exists('frameworks'):
        RedisTT().r.delete('frameworks')  # 删除key为frameworks的键值对
    RedisTT().insertRedis(keyName='frameworks', jsonStr=json.dumps(frameworks))

if __name__ == "__main__":
    save1()
    save2()

    print(RedisTT().r.lrange('someexpert', 0, RedisTT().r.llen('someexpert')))
    print(RedisTT().r.lrange('frameworks', 0, RedisTT().r.llen('frameworks')))

输出结果

屏幕快照 2018-06-09 下午6.29.18.png

导出rdb

  1. 安装redis-dump

    gem install redis-dump -V
  2. redis-dump导出数据

    redis-dumpu 127.0.0.1:6379 > db.rdb

    导出redis 默认数据库的数据,默认数据库为0,得到的db.rdb文件位于当前目录

    如果指定15数据库的数据:

    redis-dumpu 127.0.0.1:6379d 15 > db.rdb

导出得到的文件数据:

屏幕快照 2018-06-09 下午6.33.10.png

redis-load还原数据

db.rdb文件上传到新的redis服务器上,进入到db.rdb目录,执行命令
< db.rdb redis-load;
或者
cat db.rdb | redis-load

如果导出时指定了数据库
cat db.rdb | redis-load –d 15

参考资料

使用python来操作redis用法详解

Python操作redis系列之 列表(list) (五)

Redis数据导出导入-redis-dump and redis-load

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐