和slq语句比起来,这个redis数据库的操作有手就行,当然你要跟我扯实际的项目运用所带来的复杂度,那完全就是在抬杠。
当前演示环境为Windows的Phpstudy所搭建的环境,具体的操作与Linux一致,可能启动有所差异,但是都会说明。
redis 是一个NoSQL数据库,其操作不想SQL数据库,但是使用起来是更简单的,适合做高速缓存服务。采用单线程+异步I/O来实现高速的读取(在python里面其实就是协程(微线程)的意思,python里面没有流这种概念,但是有类似概念)
在phpstudy里面直接电器启动就OK了,但这个是默认启动
具体的其实也可以查看配置文件
你要是没有相关环境的话,或者是为了方便操作的话,可以先直接使用这个工具,MySQL的也有,好处就是不用你自己在Windows里面安装,你只需要配置个环境变量即可,而且也不太建议在生活系统(win里面安装数据库服务)
在前面的话我们看见了,在那里有配置文件,其实我们在Linux里面或者在windows的命令模式下启动也可以手动指定配置文件启动。
接下来介绍一下启动方式
默认启动
redis-server > redis.log & 放后台定向输入到日志
systemctl start redis-server 直接后台,而且方便管理
带入参数,指定端口,数据库数量等等
redis-server --port 1024 端口指定
systemctl start redis-server --port 1024
systemctl start redis-server --databases 32 指定数据库数量
systemctl start redis-server --port 1024 --databases 32多个指定
读取配置文件启动
这个按照你自己的需要写一个配置文件
redis-server xxx.config
systemctl start redis-server xxx.config
例如:
systemctl start redis-server /home/huterox/redis/mystart_redis.config
为了保护安全的话,在启动的时候还可以设置密码
systemctl start redis-server --requirepass yourpasswd
我这个是模拟一下,你要是真的在windows里面的phpstudy 环境下的话直接这样
这个方法就多了,那么演示一下怎么在redis里面关闭吧
quit 这个指令关闭redis-cli
shutdown 关闭 redis-server
shutdown
quit
这就关了
连接的话我们需要使用到一个玩意就是
redis-cli这个东西进行连接到我们的数据库,然后进行操作。
systemctl start redis-cli
或者直接
redis-cli
这个都是默认的连接本机的啊
redis-cli -h 主机地址 -p 对方端口
当你连接进去后,如果开启时设置了密码
那么输入:
auth yourpasswd
之后你就可以正常操作了。
这个就是一个简单的服务检测
使用redis-benchmark就好了 crtl+c停止
1.75秒10w这个性能还是可以的(鄙人设备,戴尔G5还是可以的,千万别买单背光的,我脑子当时秀逗了,外星人灯控白搭了),买的云服务器就不知道喽。
由于我们这个是键值对数据库,所以基本上没有比较复杂的语句,更多的是指令,通过指令来操作数据库。
选择数据库
select 数据库编号(0开始)
查看数据库的存储了几个数据
dbsize
keys *
这里先简单存入几个数据
set name jack
set age 20
随机返回一个key,这玩意是内置的一个方法指令,有点意思
清空数据(分两种,一个全清空,一个清除当前数据库的)
flushdb 清空当前数据库
flushall 全部
下面举个例子:
(1)切换数据库(插入一些数据)
(删除当前)
(全部删除)
删除建
del key
如果要数据保存到本地永久化的话,在默认情况下,要么在60s内有1W加的数据存储到内存中,要么这条数据在900s内还在内存中,否则不会自动保存,如果要保存的话,那么使用save或者bgsave
save保存
这个直接保存
bgsave后台保存
如果卡住了的话那么使用这个。
这里补充一下,type key 可以查看数据类型
set keyname values
get keyname
获取与读取数据
setnx 这玩意是指,当键值对存在时,不加入(也就是不改变原来的数据)
不存在就加入。
没有加入返回0
setex是值设置存在时间,例如验证码,超过60秒后就消失了
这个指令还能这样写
set key hello ex 60
mset stu1 jack stu2 jerry
这个hash类型是个什么玩意呢,最简单的样子就是类似于我们python里面的字典,前面加个h就是了,操作和那个字符串的类似
这个呢,都是只能存入和获取其中一个key
现在举个例子(这是一个python字典)现在我把它存进去
jack={'name':jack,'age':10,'heigh':185}
hmset jack name jack age 10 heigh 185
获取属性值
hmget jack name age heigh
获取key的所有值
hkeys jack
获取key对应的属性的值
hvals jack
获取所有
hgetall jack
现在我加入一个新的元素在Jack里面
hset jack s s
现在我要删除
修改属性其实也很简单,直接在原来的属性修改就行了,例如改名字为Jerry
hset jack name jerry
这个就更简单了。
但是这里的话分为左右,也就是顺序和逆序。
一个是往左放入,一个是往左开始读取。看效果
所以除此之外还有
rpush 这个就是你可以认为的顺序
lrem list 1 30
1是指删除1个从左到右,-1反之 30删去30,有时候会出现多个元素。
lpop list 删除——删的同时,把值返回从左开始
linsert list before/after 50 7
lindex list 0(从0开始 -1结尾最后一个)
llen list ——返回列表的长度
交集
sinter a b
并集
sunion a b
差集
sdiff a b (a差b)
查看元素是否在集合当中
sismember set1 80
判断80在不在 ? 1 0
spop set1 2
随机删除2个
srem set1 30
删除指定的,可以删除多个
这里的话就简单说一下吧,这玩意可以做一个在线的排行榜。
zadd phb 100 A 50 B 40 C
zrange phb 0 -1
zrevrange phb 0 -1 反之
把C加70然后看结果
zincrby phb 70 C
在redis 当中还有很多类型,例如与地理位置的相关的操作等等
更多文档类型建议去redisdoc.com 查询
基本使用是类似的。
这个我比较满意的就是,在redis的第三方库当中的所有方法其实就是Redis的操作指令,举个简单的例子。
import redis
red = redis.Redis(host='localhost', port=6379, decode_responses=True)
# host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379
red.set('name', 'junxi') # 等价 set name jack
print(red['name'])
print(red.get('name')) # get name
print(type(r.get('name')))
这里说明一下在redis里面存储的数据是bytes所以有中文的情况下是需要编码的,decode_reponses=True
通过这个例子一目了然,如何使用python进行操作。只是有时候需要对返回值进行适当的调整。
这玩意说句人话就是,一个主机负责读写,其他的设备协助主机只具备读的功能,也就是相当于实时同步了主机的数据,这样一来就可以通过访问这些设备来拿到主机当中也有的数据(只有主机master才能够写入数据其他的设备salve是只能读取的)
info replication 查看有几个奴隶机器
开启奴隶,为master主机服务
salveof host port
masterauth 主机口令
如果失败的话可以关闭然后重启
redis-server --salveod host port --masterauth 口令
查看情况也可以用info
info replication
关闭
salve of no one
在你的安装目录下会有这么个文件。在Linux也一样
这个文件主要是用来记录数据的,也就是从内存把数据存到本地,如果这个文件损坏那么自然无法启动。下面两个方案
一。删了这个文件,重来。
二。执行修复指令
redis-check-rdb dump.rdb
在存储数据到本地有两种方式,一个是把数据存到本地,还有一个那就是直接把你的指令存到本地,启动的时候重新执行你的指令恢复数据。
redis-server --appendonly(文件名随意) yes
修复
redis-check-aop --fix appendonly.aop
这个其实在你的目录下是找得到的。在Linux也一样
对了,在这里那个
redis-check-rdb 在win这不一样,上面是redis-check-dump但是用法应该是一样的。
在redis的基本使用,排错大概是这个样子的,关于数据类型那个比较多,建议去查官方文档,这里罗列出了较为常见的使用和方法。当然后面也会不断更新。