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.获取集合内容的时候显示权重信息

我是一个刚刚开始写博客的大可,内容有不详细或是错误的,还希望各位大佬私信我,我会进行纠正,谢谢啦!^-^
原文地址:https://www.cnblogs.com/sunjiaojiao/p/11162557.html