项目(2)(关系型数据库和非关系型数据库,redis,hiredis,shell基本语法)

redis

关系型数据库和非关系型数据库

关系型数据库 - sql:

  • 使用sql语句进行操作
  • 数据存储在磁盘
    • mysql
    • oracle
    • sqlserver
    • sqlite——文件数据库,嵌入式常用

非关系型数据库 - nosql:

  • 不依赖sql语句
  • 数据存储在内存中
  • 数据是可以持久化
  • 数据是通过键值对的方式存储的
    • 数据保存到磁盘
    • redis
    • MongoDB

缓存数据库和持久数据的搭配使用方式

redis内部维护了一个队列,虽然是单线程工作的,但是处理内存中的数据,因此看起来似乎是高并发的

redis分为两部分

  • 服务端——启动命令——redis-server
  • 客户端——启动命令——redis-cli

服务端启动示例

客户端启动示例以及是否启动成功测试

通过客户端关闭服务器

redis存储数据的方式——键值对

redis常用数据类型

  • 字符串类型
  • Hash类型
  • List类型
  • Set类型
  • SortedSet类型zset

redis常用命令

value相关

string类型

1、设置键值对

2、批量设置键值对

3、列出所有的键

4、批量get值

5、值的自增操作

6、值的自减操作

7、做值的拼接

list类型

操作过程中,既可以按照操作,又可以按照队列操作。

1、数据插入(从左侧插入)

2、遍历数据,0代表从第0个开始,-1代表到最后一个元素结尾(同理,-2代表倒数第二个元素,-3代表倒数第三个元素)

3、数据插入(从右侧插入)

4、从左边弹出数据

5、求list的长度

总结

队列:——队头出数据, 队尾进数据

  • rpush
  • lpop

栈——只能操作栈顶

  • lpush
  • lpop

第二种方式

  • rpush
  • rpop

遍历:

  • lrang key  start end
  • start - 开始下标 0
  • 最后一个元素: -1

set类型

集合的特征是不包含重复元素,这里的set也不包含重复元素

1、添加数据(sadd的意思是set  add; 因为集合中不包含重复元素,因此执行完命令之后的返回值是5)

2、遍历

3、求差集

4、求交集

5、求并集

SortSet类型

集合中每个元素都有一个分数,Sortedset会根据分数进行排序

1、插入数据

2、输出带分数

3、输出降序结果

hash类型

一个key可以对应多个键值对

1、创建hash类型

2、获取

3、批量设置

4、批量获取

key相关

1、列举所有的键

2、设置key的生存时间(设置键set1的存活时间为60秒)

3、查看键的剩余生命时间

4、清除生存时间

5、删除key

6、重命名

修改redis的配置文件

配置文件路径(redis.conf在redis的安装包中)

设置redis远程访问

1、关闭端口绑定

2、支持远程访问

如果还是连不上,那就是防火墙的事情了

其他设置

3、设置redis服务器是否为守护进程

4、redis以守护进程方式运行时,会将pid存放

5、日志文件的存储位置,默认是扔到无底洞(/dev/null)里面直接被删除掉

6、redis里面默认有16个数据库

再次启动redis服务器

redis-server redis.conf 

redis数据持久化

redis两种持久化方式:

1、rdb形式 - 默认方式——存储数据

特点:

  • 快照的方式
  • 存储的是内存的数据
  • 按照一定的频率做数据存储

缺点:

  • 存储频率太高, 存储效率低
  • 频率太低, 同步不及时

优点:

  • 数据恢复要快一些

2、Aof形式——存储命令

特点:

  • 存储的是命令

优点:

  • 数据存储到磁盘效率高
  • 占用磁盘空间小

缺点:

  • 数据恢复用时比较长

设置方法——在redis.conf文件中

hiredis

连接数据库

redisContext *redisConnect(const char *ip, int port);
  • IP: redis server的ip
  • port: 端口

 

 

发送请求命令

void *redisCommand(redisContext *c, const char *format, ...);

返回值

  • 返回值是一个void类型的指针,实际为指向一个redisReply类型的指针
typedef struct redisReply {
        /*命令执行结果的返回类型*/
        int type; /* REDIS_REPLY_* */
        /*存储执行结果返回为整数*/
        long long integer; /The integer when type is REDIS_REPLY_INTEGER */
        /*字符串值的长度*/
        size_t len; /* Length of string */
        /*存储命令执行结果返回是字符串*/
        char *str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */
        /*返回结果是数组的大小*/
        size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */
        /*存储执行结果返回是数组*/
        struct redisReply **element; /* elements vector for REDIS_REPLY_ARRAY */
} redisReply;

 

状态标识

含义

REDIS_REPLY_STRING==1

返回值是字符串,字符串储存在redis->str当中,字符串长度为redis->len

REDIS_REPLY_ARRAY == 2

返回值是数组,数组大小存在redis->elements里面,数组值存储在redis->element[i]里面。数组里面存储的是指向redisReply的指针,数组里面的返回值可以通过redis->element[i]->str来访问,数组的结果里全是type==REDIS_REPLY_STRING的redisReply对象指针。

REDIS_REPLY_INTEGER == 3

返回整数long long,从integer字段获取值

REDIS_REPLY_NIL==4

返回值为空表示执行结果为空

REDIS_REPLY_STATUS ==5

返回命令执行的状态,比如set foo bar 返回的状态为OK,存储在str当中 reply->str == "OK"。

REDIS_REPLY_ERROR ==6

命令执行错误,错误信息存放在 reply->str当中。

 

 

释放资源

void freeReplyObject(void *reply);
void redisFree(redisContext *c);

shell

1、设置shell脚本使用什么样的命令解析器,即指定解析shell文件时候的命令解析器

#!/bin/bash

2、脚本需要设置可执行权限

chmod u+x xxx.sh

3、条件判断语句

if [ 判断语句 ];then
	xxxx
	xxx
	xxx
elif [ 判断语句 ];then
	xxxxxx
else
	xxxxx
fi

注意:

  • if 和中括号直间有一个空格
  • [ ]中的判断语句前后必须有一个空格

4、特殊变量

  • $#——shell脚本执行的时候 传递的参数个数(例如:./xx.sh  aa bb cc dd ee 一共有五个参数)
  • $?——上一条shell命令执行完成之后的返回值(每一条shell命令执行成功之后都有返回值)
  • $@——所有的参数(比如上面例子的aa bb cc dd ee)
  • $*——  所有的参数
  • $1  $2  $3——分别代表第一个参数(即aa),第二个参数(即bb)和第三个参数(即cc)

5、脚本中的变量

a、变量的定义

  • var="hello"
  • 变量的值默认是字符串类型
  • 变量名建议大写

b、赋值操作

  • var=10——等号的左右不能有空格,如果有空格,就变成了判断语句

c、删除变量

  • unset 变量名

d、将命令执行之后的值赋值给变量

  • var=`date` ——使用反单引号,将date变量中存储的值赋值给var变量
  • var=$(date)——对变量date进行取值操作,将取出来的值赋值给var

e、算术运算——变量先取值, 然后再做算数运算, 取值方式 有 2种

  • $(($VAR+4))——通过$将变量中的值取出,取出之后再进行运算,之后再将运算结果取出
  • $[$VAR+4]

猜你喜欢

转载自blog.csdn.net/qq_29996285/article/details/87680679