zoukankan      html  css  js  c++  java
  • Nosql简介及redis介绍、使用方法

    ①-nosql简介

    NoSQL,指的是非关系型的数据库。

    常见的nosql产品有哪些?

    redis、memcache、mongodb

    nosql产品两个显著的特点:

    nosql产品一般不使用严格的表结构(行和列的组成形成一个表)
    nosql产品的数据的查询一般都不在使用sql查询
    网站:http://nosql-database.org/ 列出世界上正在使用的产品

    ②-常见的nosql产品比较

    ③-redis简介

    redis是一个key-value的nosql产品,和Memcached类似,但它储存的value类型相对更加丰富,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash,与memcached一样,为保证效率,数据都是缓存在内存库中,区别的是redis会周期性的把内存中的数据写入到硬盘中(被称为数据持久化),同时由于redis支持的是value类型众多,也被称为结构化的nosql数据库。

    网站:http://redis.io

    ④-redis的安装

    1.安装包的选择(选择合适的版本)


    2.复制并解压该安装包到一个非中文和非空格的文件夹下即可
    文件名解析:
    redis.conf : redis配置文件
    redis-benchmark.exe : 对redis做压力检测的命令
    redis-check-aof.exe / redis-check-dump.exe : 对redis的日志文件做检测的命令
    redis-cli.exe : redis的客户端命令
    redis-server.exe : redis服务端的启动命令

    3.启动redis服务(需要在windows的命令行下进行,并且要以超级管理员的身份启动cmd
    >d:
    >cd redis
    >dir
    >redis-server.exe
    出现下图则启动成功:


    默认启动端口是: 6379
    注:在windows下启动redis服务后,会占据这个窗口,需要终止redis的服务,需要使用ctrl + c 从即可

    简单操作(需要使用redis的客户端命令来连接redis的服务器端)
    >d:
    >cd redis
    >redis-cli.exe
    >ipconfig(查看ip地址)
    >redis-cli.exe -h (ip地址) -p (默认端口号)
    >get name asion
    >get name

    ⑤-redis的数据类型

    string类型

    1). 设置value

    2). 获取value

    3). incr 做自增操作,可以对某个key的value进行+1的操作

    4). decr 做自减操作,可以对某个key的value进行-1的操作

    5). incrby指定自增的数字

    6). decrby指定自减的数字

    7). keys命令获取redis里面的所有key

    redis的key是如何设计的?

    思考:原先在mysql里面的数据是如何存储的?
    答:使用it_user表(行和列的组合)

    如果把上面mysql表里面的数据存储到redis里面,存储的key该如何设计?
    答:分以下几步操作:

    a:把mysql里面的表名获取redis里面的key的前缀(it_user前缀)
    b:把mysql表里面的主键名称放在上面的前缀后面,一般使用冒号分割(it_user:id)
    c:对应记录的主键值做key的第三步(it_user:id:1)
    d:把mysql里面的其他的字段作为key的第四部分(it_user:id:1:username)

    把上面mysql表里面的记录保存到redis

    获取用户的信息,例如要获取用户id为1的信息

    hash类型

    redis里面的hash类型有点类似php里面的关联数组
    1.hset设置单个值


    2.hget获取值


    3.hmset设置多个值


    4.hgetall获取hash里面全部值

    list类型

    redis里面的list类型被称为链表类型的概图


    1.lpush 向链表的头部放入数据


    2.rpush向链表的尾部放入数据


    3.lrange获取链表里面的数据

    4.lpop在链表的左侧弹出第一个数据


    5.rpop在链表的右侧弹出最后一个数据

    6.链表数据结构在实际项目中有哪些地方可以使用?
    答:例如,后台要统计一下最近登录的是个用户,如果使用mysql来完成,形成这条sql来查询数据:
    sql:select * from user order by logintime desc limit 10;

    换成redis里面的链表实现:创建一个list类型,从链表的左侧加入最近登录的用户主键id;
    当里面的单元超过10个后,只需要把最右侧的那个单元弹出即可

    set类型

    redis里面的set类型被称为无序集合类型
    集合是数学里面常见的一个概念,可以理解是一类数据的集合,
    集合满足三个特点:
    a.无序性:集合里面的数据没有顺序之分
    b.唯一性:集合里面的数据彼此不能重复
    c.确定性:集合里面的数据的个数是确定的

    集合概图:

    集合常见的运算:
    交集(∩):集合公共的部分:例如上面集合A和集合B的交集是 2
    并集(∪):集合全部的部分:例如上面集合A和集合B的并集是 1 2 3
    差集(A-B):A-B代表的含义是元素在A里面出现,但元素不能在B里面出现:例如上面集合A-集合B结合是 1

    1.sadd向集合里面添加元素


    2.smember 获取集合里面的元素


    3.srem移除集合里面的某个元素


    4.spop随机弹出集合里面的元素


    5.集合的一个实际使用场景
    答:一般redis里面的集合被用在社交型的网站里面做好友关系的展示。
    例如实现好友的推荐,共同好友

    案例:
    a.设计四个用户(key的设计参照一般key的设计思路)

    b.设计好友的集合
    用户id为3的用户好友集合里面有1 和 2 :代表含义是3号用户有两个好友


    用户id为45的用户好友集合里面的数据是: 2 :代表含义是45号用户有一个好友

    c.求取好友关系
    1). 获取3号和45号的共同好友(求交集)


    2). 获取3号和45号的全部好友(求并集)


    3). 让3号用户给45号用户推荐好友(求差集)

    zset类型

    redis里面的zset类型被称为有序集合类型,意味有序集合里面的元素是排好序的,也满足唯一性和确定性

    有序集合概图:

    1.zadd添加元素


    2.zrange获取集合里面的元素


    3.获取集合内容的时候显示权重信息

    我是一个刚刚开始写博客的大可,内容有不详细或是错误的,还希望各位大佬私信我,我会进行纠正,谢谢啦!^-^
  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/sunjiaojiao/p/11162557.html
Copyright © 2011-2022 走看看