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-server和redis-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也是存放很多字符串元素
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?