REDIS基础

发布于:2022-11-28 ⋅ 阅读:(323) ⋅ 点赞:(0)

初识redis

一:认识nosql:

SQL                         Vs                         NOSQL

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

1# 结构化(数据约定,字段约束) 1#非结构化

2#关联的,关系型数据库(表关联)                 2#无关联(以json格式保存,无需关联)            ##比如一张表记录了用户名ID等,另一张表记录了产品id等,当用户购买了产品之后,数据表就会记录该用户ID和产品ID。这样就可以知道该用户买了哪些东西。redis是以json形式来记录该用户买了什么产品,直接存储在表内。

3#sql查询                                                                 3#非sql

sql:select id, name ,age FROM tb_user WHERE id = 1(参数)    redis:get user:1 (1是参数)

4#事务ACID (是指数据库管理系统DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性) 4#BASE

两者的差异(大致):(sql存储在磁盘,redis存储在内存(查询速度较高)redis扩展较为方便,sql较差)

认识redis

特征:

  • 键值型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性(虽然6.0是多线程,但那时针对网路请求的,其实本质还是单线程)
  • 低延迟,速度快(基于内存,IO多路复用,良好的编程)
  • 支持数据持久化(定期将数据从内存持久化到磁盘)
  • 支持主从集群(读写分离),分片集群(数据拆分,存到不同的节点上。存储上线提高)
  • 支持多语言客户端

安装redis,并配置开机自启(centos7)

安装依赖:

yum -y install gcc tcl

软件包下载地址:Download | Redis

tar pvxf redis-7.0.5.tar.gz cd redis-7.0.5/ make && make install

默认的安装路径:/usr/local/bin目录下:

1:默认启动方式:

redis-server #直接输入,默认启动(前台启动方式,退出即停止)

2:指定配置启动:

cd /root/redis-7.0.5/

cp redis.conf redis.conf.bak

vim redis.conf

#监听的地址,默认时127.0.0.1,回导致只能在本地访问,修改为0.0.0.0则可以在任意IP访问。生产环境不设置为0.0.0.0

bind 0.0.0.0

#守护进程,修改为yes后即可在后台运行

daemonize yes

#密码,设置后访问redis必须输入密码

requirepass 123456

#redis的其他常见配置

#监听的端口

port 6379

#工作目录,默认时当前目录,也就是运行redis-server时的命令,日志,持久化等文件会保存在这个目录

dir ./

#数据库数量,设置为1,表示只是用1个库,默认有16个库,编号0-15

databases 1

#设置redis能够使用的最大内存

maxmemory 512mb

#日志文件,默认为空,不记录日志,可以指定日志文件名称

logfile "redis.log"

#使用指定文件启动

cd /root/redis-7.0.5/

redis-server redis.conf

3:配置开机自启:

vim /etc/systemd/system/redis.service

[Unit]

Description=redis-server

After=network.target

[Service]

Type=forking

ExecStart=/usr/local/bin/redis-server /root/redis-7.0.5/redis.conf                 #前面是安装后的redis-server的路径,后面是存放redis.conf的路径,这行注释不要复制进去

PrivateTmp=true

[Install]

WantedBy=multi-user.target

#重新加载系统服务

systemctl daemon-reload

systemctl start redis

#在启动redis前需要把之前启动的redis给干掉,不然会报错。用netstat -untlp 查看redis的进程号, kill -9 +进程号 杀死进程

systemctl status redis

systemctl enable redis.service --now #配置redis的开机自启

Redis客户端

安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括:

  • 命令行客户端
  • 图形化桌面客户端
  • 变成客户端

命令行客户端

Redis安装完成后就自带命令行客户端:redis-cli,使用方式如下:

redis-cli [options] [commonds]

#常见的options有: -h 127.0.0,1 :指定要连接的redis节点的IP地址,默认时127.0.0.1 -p 6379:指定要连接的redis节点的端口,默认是6379 -a 123456 :指定redis的访问密码

#如果不指定密码,那么进入之后需要输入 AUTH 123456 当返回OK的时候,就表示密码登录成功。

#其中commonds就是Redis的操作命令,例如: ping:与redis服务端做心跳测试,服务端正常会返回pong

#不指定commonds时,会进入redis-cli的交互控制台:

图形化桌面客户端(初使用建议使用命令行界面)

下载地址:Releases · lework/RedisDesktopManager-Windows · GitHub

图形化界面的软件包由rdm更名为resp,下载下来之后将exe软件安装。

连接完成之后显示默认的16个库,0-15。点击加号可以添加数据表。添加完表之后,在命令行界面可以使用:select 1(1表示选择哪一个数据库) get name 查看数据库的表明;

redis的数据结构介绍

redis是一个键值型数据库(key-value),key一般是String类型,不过value类型多种多样:

string 普通字符串 Hash 一个hash表 List 有序的集合,本质是一个列表 Set 是一个无序的集合,并且是不能重复的。 SortedSet 有序的集合,不能重复的。

官方帮助文档:Commands | Redis

Redis通用命令

通用命令是部分数据类型都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key 例子:(尽量不要使用生产环境使用,因为查询会阻塞其他的请求。)

redis> KEYS *name*         #查询包含name的名称的表

redis> KEYS a??                 #查询以a开头的名称的表

redis> KEYS *                 #查询所有表 

  • DEL:删除一个key 例子:

127.0.0.1:6379[1]> DEL k1 k2 k3 k4 k5

(integer) 3                 #这个是返回的值,意思是del删除了几个key。

  • EXISTS:判断key是否存在 例子: 存在返回1,不存在返回0

127.0.0.1:6379[1]> EXISTS age

(integer) 0

127.0.0.1:6379[1]> EXISTS name

(integer) 1

  • EXPIRE:给key设置有效期,有效期到期时该key会被自动删除。(redis是使用内存来存储数据的,所以需要设置一个有效期来释放内存。一般用于短信验证码)
  • TTL:查看一个key的剩余有效期 #当一个key的有效期为-2的时候,表示该keys已经被删除,当key的有效期为-1的时候。表示该值永久有效

String常用类型和基本用法

string类型,也就是字符串类型,是redis里面最简单的存储类型。

string类型的常见命令:

set:添加或者修改已经存在的一个seting类型的键值对

get:根据key获取string类型的value

mset:批量添加多个sting类型的键值对

mget:根据多个key获取多个string类型的value

incr:让一个整型的key自增1

incrby:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2

incrbyfloat:让一个浮点类型的数字自增并指定步长

setnx:添加一个string类型的键值对,前提是这个key不存在,否则不执行

setex:添加一个string类型的键值对,并且指定有效期

key的层级格式

127.0.0.1:6379[1]> set ceshi:user:1 '{ "id":1, "name":"test1", "age":18 }' #格式不能错 127.0.0.1:6379[1]> set ceshi:user:2 '{ "id":2, "name":"test2", "age":18 }' #格式不能错 127.0.0.1:6379[1]> set ceshi:product:1 '{ "id":1, "name":"xiaomi", "proc":"2399" }' #格式不能错 127.0.0.1:6379[1]> set ceshi:product:1 '{ "id":1, "name":"xiaomi", "proc":"2399" }' #格式不能错

 #当使用同一个id的时候,可以在前面增加项目业务类型等标记。当项目名一样时,创建数据库表时会默认创建一个大的文件夹(以项目名命名的文件夹)而且虽然id相同,但是因为其中的业务名不同所以也很好区分,而且数据表是以json格式保存的。

redis命令-hash类型

hash类型的常见命令:

hset key filed value:添加或者修改hash类型的key的field的值

hget key filed:获取一个hash类型的key的filed的值

hmset:批量添加多个hash类型key的filed的值

hmget:批量获取多个hash类型的key中的说有的field和value

hgetall:获取一个hash类型的key中的所有的field和value

hkeys:获取一个hash类型的key中的所有的field

hvals:获取一个hash类型的key中的所有的value

hincrby:让一个hash类型key的字段值自增并指定步长

hsetnx:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

127.0.0.1:6379[1]> HSET ceshi:user:3 name lisi

(integer) 1

127.0.0.1:6379[1]> hset ceshi:user:3 age 24

(integer) 1

127.0.0.1:6379[1]> HGET ceshi:user:3 age "24"

127.0.0.1:6379[1]> HGET ceshi:user:3 name "lisi"

127.0.0.1:6379[1]> hset ceshi:user:3 age 10

(integer) 0

127.0.0.1:6379[1]> hmset ceshi:user:4 name zhangsan age 15 sex man

OK

127.0.0.1:6379[1]> HMGET ceshi:user:4 name age sex

1) "zhangsan"

2) "15"

3) "man"

###使用hash来添加数据库的值,有个好处就是可以随意修改filed的值,且它保存的方式是hash表

list类型(保存一些有顺序的数据,例如评论,点赞等):

list常见命令:

lpush key element ...:向列表左侧插入一个或多个元素

lpop key:移除并返回列表左侧的第一个元素,没有则返回nil

rpush key element ...:向列表右侧插入一个或多个元素

rpop key:移除并返回列表右侧的第一个元素

lrange key star end:返回一段角标范围内的所有元素

blpop和brpop:与lpop和rpop类似,只不过在没有元素是等待指定时间,而不是直接返回nil

set类型

set常见命令:

sadd key member ...:向set中添加一个或多个元素

srem key member ...:移除set中的指定元素

scard key:返回set中元素的个数

sismemer key member:判断一个元素是否存在于set中

smembers:获取set中的所有元素

sinter key1 key2 ...:求key1与key2的交集

sdiff key1 key2 ...:求key1与key2的差集

sunion key1 key2 ...:求key1和key2的并集

sortedset类型:可排序的类型

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到