Redis的使用

1.基础介绍

Redis是NoSQL数据库,不是传统的关系型数据库 官网http://www.redis.cn/  redis指令http://redisdoc.com/

Redis(remote dictionary server 远程字典服务器),性能高,单机能够达到15w qps,通常适合做缓存,也可以做持久化。是开源的,到性能的分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是最热门的NoSql数据库之一,也称为数据结构服务器。

 

2.redis安全:

redis如果bind没有设置127.0.0.1(只有本地可以访问redis)而是bind设置了服务器ip地址(只有通过该网卡进来的请求才能访问redis)但是没有设置密码requirepass,会很容易被攻击

1)未授权攻击Redis

2)授权攻击Redis

一般攻击后都是弄个病毒或者肉鸡了,常规解决方案:

1)先找到异常的程序,一般cpu都会飙高,先kill掉。

2)一般kill不掉,会是个定时任务,处理掉定时任务。

3) 查看/root/.ssh下的authorized_keys文件是否是自己配置的,查看一下/etc/passwd

下的权限是否改动,查看一下/etc/init.d一些启动脚本,等等

4)如果部分命令失效,可能被修改了,stat /usr/bin/xx,查看下命令最新修改记录和大小情况。

5)病毒之类的文件可能无法删除,即便是root都不行,可以尝试使用chattr & lsattr

6)lastb看看登录失败的情况,ps -aux看看进程,做好安全防护。

 

3.redis的安装(linux)与配置

3.1redis的安装

下载tar包https://redis.io/download/ :redis-6.2.6.tar.gz

解压:tar-zxvf  redis-6.2.6.tar.gz

安装:cd redis-6.2.6 && make。此时在src文件中有redis-serverredis-cli

若要在 /usr/local/bin 目录下也安装上述可执行文件,src cd src&&make install

3.2修改配置文件

vim /data/redis.conf

daemonize no -->yes   #后台启动

requirepass xxxx    #配置连接密码,默认为空密码非常容易被黑

bind 10.12.60.68 #修改连接主机ip   默认为127.0.0.1只能本机连接,修改为服务器的ip则其他服务器也能连接。

protected-mode no 关闭保护模式,设置是否开启网络保护模式,默认为yes(开启)。这个选项的工作方式是,如果您没有设置了bind参数,也没有设置安全登录密码,则当这个参数开启时Redis只允许本地连接的客户端访问。也就是说如果您不设置bind参数,而又需要其它客户端通过网络访问,那么就设置这个参数为no(关闭)

timeout 3600 设置超时时间时间为秒,如果client超时闲置,则redis端会断开连接

tcp-keepalive  300  设置健康检查时间,每300sredis端会向连接的client发送心跳检测,若反馈有问题则redis会关闭连接。

3.3启动redise服务器

启动必须指定配置文件,不然使用默认设置,不会自动读取redis目录下的redis.conf

./redis-server  /data/redis.conf

3.4启动redis客户端

./redis-cli -h 10.12.60.68 #需要指定主机名-h,还可以通过-p xxxx 来指定端口,默认为6379,还可以通过 -a xxx 来指定密码  也可后面通过auth xxx来认证密码

auth vfooi72020

4.Redis的命令

redis指令http://redisdoc.com/

redis键(key

1)添加key-val  [set]

2)查看当前redis的所有key   [keys *] 

3)获取key对应的值  [get key]

4)切换redis数据库  [select index],默认进入是在0数据库,默认一共有16个数据库

5)查看当前数据库key-val数量  [dbsize]

6)清空当前数据库的key-val  [flushdb]和清空所有数据库的key-val  [flushall]

exists k1  查看键是否存在

type k1 查看键的类型

expire k1 10   设置key的过期时间 单位为s

ttl  k1 查看key剩余时间,-1代表永不过期,-2代表已经过期

del k1 删除键

unlink k1 删除键(非阻塞模式,先打删除tag使不可查询,待有空闲时再删除)

5.Redis的数据类型和CRUD

Redis的五大数据类型是:String(字符串)、Hase(哈希)、List(列表)、Set(集合)、Zset(sorted set:有序集合)

5.1String(字符串)

string是redis最基本的类型,一个key对应一个value。

string类型是二进制安全的。除普通的字符串外,也可以存放图片等数据。redis中字符串value最大是512M

CRUD操作:

1)set[如果存在就相当于修改,不存在就是添加]/get/del

举例:set address 北京;get address

2)设置超时时间setex key seconds value

举例:setex mess01 10 hello,you

将value关联到key,并将key的生存时间设置为seconds(以秒为单位),如果key已存在,该命令覆盖旧值

这个命令相当于以下两个命令

set key value

expire key seconds #设置生存时间

3)同时设置一个或多个key-value对 mest[key value...]

同时获取一个或多个key-value mget[key1...]

如果某个给定的key已经存在,则会覆盖旧值

举例:

设置  mset a1 tom a2 laly

获取 mget a1 a2

5.2Hash(哈希,类似golang里的Map)

Redis hash是一个键值对集合。var user map[string]string

Redis hash是一个string类型的field和valus的映射表,hash特别适合于存储对象。

Hash是string类型的映射表,即使看着是用的数值类型,其实存储也是string类型。

Hash的Crud:

hset/hget/hgetall/hdel

hmset/hmget/hlen/hexists

举例:

设置user1: hset user1 name smith ; hset user1 age 30; hset user1 job "go coder"

获取user1的每个字段:hget user1 name; hget user1 age; hget user1 job

获取user1:hgetall user1

删除user的字段:hdel user1 age

用hmet设置user2: hmset user2 name layi age 32 job "java coder"

用hmget获得user2的字段:hmget user2 name job age

获取一个hash有几个元素:hlen user2

查看一个hash中,给定的元素是否存在:hexists user2 name

5.3List(列表)

列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。

List本质是个链表,List的元素是有序的,元素的值可以重复。

Crud:lpush/rpush/lrange/lpop/rpop/del

llen 返回key元素的长度

lrange key start stop 返回列表key中指定区间内的元素,区间以偏移量start和stop指定。下标(index)参数start和stop都以0为底,也就是说以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

lrange(左取出)是取出数据,lpop(左弹出)/rpop(右弹出)是取出并拿走,会去弹出去除掉这个数据

通常可以用作操作最近浏览的前n个商品(插入,获得)

举 例:存放三个地址信息 city 北京 天津 上海

l是从左边插入,加在前面,但是先存是数据在后,后存的在前,从左边(前面)取,list是链表结构,此时先进后出,所以先存的数据最后才能取到。

如果是从右边插入,则会加在后面但是先存的在前面,后存的在后面,从左边取(取只能从左边取),此时先进先出,先存是数据先取到。

存放city:  lpush/rpush city beijing shanghai tianjin

取出city:  lrange city 0 -1   (0代表第一个 -1代表倒数第一个)

弹出:  lpop/rpop city

删除: del city

取key长度  llen city 

5.4Set(集合)

Redis的Set的string类型的无序集合

底层是HashtABLE数据结构,Set也是存放很多字符串元素

 

posted @   潇潇暮鱼鱼  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示