数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失。
selenium操作浏览器时,要注意浏览器资源释放,方式内存泄露,崩溃
mysql是文件型数据库,默认持久化到硬盘上
redis 是内存型数据库
数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失selenium操作浏览器时,要注意浏览器资源释放,方式内存泄漏,崩溃。 with opne() 默认close关闭文件句柄 word工具,额米有保存前,数据放在内存里,保存后持久化到磁盘上,永久存储在mysql是文件型数据库,默认持久化到磁盘上
数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失selenium操作浏览器时,要注意浏览器资源释放,方式内存泄漏,崩溃。
with opne() 默认close关闭文件句柄
word工具,额米有保存前,数据放在内存里,保存后持久化到磁盘上,永久存储在mysql是文件型数据库,默认持久化到磁盘上
1.解决编译安装所需的依赖环境yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y2.在目标目录下 ,下载源代码包wget http://download.redis.io/releases/redis-4.0.10.tar.gz 解压:tar -zxvf -redis-4.0.10.tar.gz 3.执行./configure --prefix=/opt/redis/ #释放makefile,告诉gcc编译器,redis的安装路径 如果默认没有configure脚本,出现了makefile,直接make&&make install 安装即可 4.编译且安装make && make install
1.解决编译安装所需的依赖环境
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
2.在目标目录下 ,下载源代码包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
解压:tar -zxvf -redis-4.0.10.tar.gz
3.执行./configure --prefix=/opt/redis/ #释放makefile,告诉gcc编译器,redis的安装路径
如果默认没有configure脚本,出现了makefile,直接make&&make install 安装即可
4.编译且安装
make && make install
#如果你发现云服务器被矿机攻击,有一个进程占用100%CPU资源!解决: kill -9 杀死进程检查定时任务 crontab -l 检查定时任务 crontab -e 编辑定时任务文件,可以删除,定时任务。 全局搜索病毒文件,删除它(注意恶意病毒,篡改了文件名,了解即可) find / -name 病毒文件 找到了 rm -rf 删除如果 删除不掉,很有可能文件被加锁了 lsattr filename.txt chattr -a filename #给文件去锁
#如果你发现云服务器被矿机攻击,有一个进程占用100%CPU资源!
解决:
kill -9 杀死进程
检查定时任务
crontab -l 检查定时任务
crontab -e 编辑定时任务文件,可以删除,定时任务。
全局搜索病毒文件,删除它(注意恶意病毒,篡改了文件名,了解即可)
find / -name 病毒文件
找到了 rm -rf 删除
如果 删除不掉,很有可能文件被加锁了
lsattr filename.txt
chattr -a filename #给文件去锁
启动redis服务: redis-server直接这样执行: 会出现不安全情况,容易被攻击
启动redis服务:
redis-server
直接这样执行:
会出现不安全情况,容易被攻击
(1)redis没有用户概念,redis只有密码(2)redis默认在工作在保护模式下。不允许远程任何用户登录的(protected-mode)
(1)redis没有用户概念,redis只有密码
(2)redis默认在工作在保护模式下。不允许远程任何用户登录的(protected-mode)
更改启动端口
port 6380 #更改默认启动端口
添加redis密码
requirepass xxxxxx #设置redis启动密码,xxxx是自定义的密码
开启redis安全模式
protected-mode yes #打开保护模式
1.第一步[root@xujunk safe_conf]#vim /safe_conf/redis.conf#在redis.conf配置信息如下 bind 127.0.0.1 protected-mode yes port 6379 requirepass haohaio daemonize yes pidfile /var/run/redis_6379.pid loglevel notice logfile ""2.用自己配置好redis.conf 开启redis[root@xujunk safe_conf]#redis-server /opt/my_redis/redis-4.0.10/safe_conf/redis.conf3.查看redis启动状态:[root@xujunk safe_conf]#ps -ef |grep redis4.redis-cli启动,haohaiyou是密码[root@xujunk safe_conf]#redis-cli -p 6400 -h 127.0.0.1 -a haohaiyou
1.第一步
[root@xujunk safe_conf]#vim /safe_conf/redis.conf
#在redis.conf配置信息如下
bind 127.0.0.1
protected-mode yes
port 6379
requirepass haohaio
daemonize yes
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
2.用自己配置好redis.conf 开启redis
[root@xujunk safe_conf]#redis-server /opt/my_redis/redis-4.0.10/safe_conf/redis.conf
3.查看redis启动状态:
[root@xujunk safe_conf]#ps -ef |grep redis
4.redis-cli启动,haohaiyou是密码
[root@xujunk safe_conf]#redis-cli -p 6400 -h 127.0.0.1 -a haohaiyou
#找出注释行的数据grep "^#" redis.conf#找出空行grep "^$"#找出除空白行 和 注释行 以外的行[root@xujunk redis-4.0.10]#grep -v "^#" redis.conf | grep -v "^$" #-v 作用取相反
#找出注释行的数据
grep "^#" redis.conf
#找出空行
grep "^$"
#找出除空白行 和 注释行 以外的行
[root@xujunk redis-4.0.10]#grep -v "^#" redis.conf | grep -v "^$"
#-v 作用取相反
bind 192.168.182.130 #绑定ip,如需要远程访问,需要填写服务器ipprotected-mode yes #安全模式 port 6800 #端口 requirepass haohaio #密码 daemonize yes#守护进程方式运行,后台运行pidfile /var/run/redis_6379.pid#进程id文件loglevel notice #日志等级logfile ""#日志文件slaveof#主从复制
bind 192.168.182.130
#绑定ip,如需要远程访问,需要填写服务器ip
protected-mode yes #安全模式
port 6800 #端口
requirepass haohaio #密码
#守护进程方式运行,后台运行
#进程id文件
#日志等级
#日志文件
slaveof
#主从复制
[root@xujunk redis-4.0.10]#redis-server redis.conf
[root@xujunk redis-4.0.10]#redis-cli -p 6379 -h 127.0.0.1
ps -ef|grep redisnetstat -tunlp|grep redis#LISTEN 表示监听状态
ps -ef|grep redis
netstat -tunlp|grep redis
#LISTEN 表示监听状态
客户端输入: 127.0.0.1:6379> ping 返回值:PONG
客户端输入:
127.0.0.1:6379> ping
返回值:PONG
基本命令:
127.0.0.1:6379> keys * #查看所有的key127.0.0.1:6379> type key #查看key的类型127.0.0.1:6379> expire key seconds #过期时间 示例: >expire name "Tom" 10 #表示10秒后 {"name":"Tom"}键值对将消失127.0.0.1:6379> ttl key #查看key过期剩余时间 -2表示key已经不存在了127.0.0.1:6379>persist key #取消key的过期时间 -1表示key存在,没有过期时间127.0.0.1:6379>exists key #判断key存在 存在返回1 否则0127.0.0.1:6379>exists key #判断key存在不? 存在返回1 否则0127.0.0.1:6379>del key #删除key 返回1代表删除成功,返回0代表删除失败127.0.0.1:6379>dbsize #计算当前库key的数量, 没有参数
127.0.0.1:6379> keys * #查看所有的key
127.0.0.1:6379> type key #查看key的类型
127.0.0.1:6379> expire key seconds #过期时间
示例:
>expire name "Tom" 10
#表示10秒后 {"name":"Tom"}键值对将消失
127.0.0.1:6379> ttl key #查看key过期剩余时间 -2表示key已经不存在了
127.0.0.1:6379>persist key #取消key的过期时间 -1表示key存在,没有过期时间
127.0.0.1:6379>exists key #判断key存在 存在返回1 否则0
127.0.0.1:6379>exists key #判断key存在不? 存在返回1 否则0
127.0.0.1:6379>del key #删除key 返回1代表删除成功,返回0代表删除失败
127.0.0.1:6379>dbsize #计算当前库key的数量, 没有参数
1.set 设置key 127.0.0.1:6379> set k1 "v1" >>>OK2.get 获取key 127.0.0.1:6379> get k1 >>>"v1"3.append 追加string 127.0.0.1:6379>append name ' dsb' >>> 6 #返回追加后字符串长度4.mset 追加key的string 127.0.0.1:6379> mset u1 "xm" u2 "xg" u3 "xh" OK5.mget 获取多个value 127.0.0.1:6379> mget u1 u2 1) "xm" 2) "xg"6.del 删除key 127.0.0.1:6379> del k1 (integer) 17. incr 递增 +1 127.0.0.1:6379> incr num (integer) 108.decr 递减-1 127.0.0.1:6379> decr num (integer) 9
1.set 设置key
127.0.0.1:6379> set k1 "v1"
>>>OK
2.get 获取key
127.0.0.1:6379> get k1
>>>"v1"
3.append 追加string
127.0.0.1:6379>append name ' dsb'
>>> 6 #返回追加后字符串长度
4.mset 追加key的string
127.0.0.1:6379> mset u1 "xm" u2 "xg" u3 "xh"
OK
5.mget 获取多个value
127.0.0.1:6379> mget u1 u2
1) "xm"
2) "xg"
6.del 删除key
127.0.0.1:6379> del k1
(integer) 1
7. incr 递增 +1
127.0.0.1:6379> incr num
(integer) 10
8.decr 递减-1
127.0.0.1:6379> decr num
(integer) 9
1.lpush 从列表左边插入 127.0.0.1:6379>lpush hobby "sleep" "swim" "read"2.lrange 获取一定长度的元素 127.0.0.1:6379> lrange hobby 0 3 1) "read" 2) "swim" 3) "sleep"3.rpush 从列表右边插 127.0.0.1:6379> lrange hobby 0 4 1) "read" 2) "swim" 3) "sleep" 4) "pingpang"4.ltrim 截取一定长度列表,从索引0取到2,删除其余的元素 127.0.0.1:6379> ltrim hobby 0 2 OK5.llen 查看长度 127.0.0.1:6379> llen hobby (integer) 36.lpop 删除最左边一个元素 127.0.0.1:6379> lpop hobby "read"7.rpop 删除最右边一个元素 127.0.0.1:6379> rpop hobby "sleep"8.lpushx/rpushx key存在添加值,不存在不处理 127.0.0.1:6379> lpushx hobby "read" (integer) 2
1.lpush 从列表左边插入
127.0.0.1:6379>lpush hobby "sleep" "swim" "read"
2.lrange 获取一定长度的元素
127.0.0.1:6379> lrange hobby 0 3
1) "read"
2) "swim"
3) "sleep"
3.rpush 从列表右边插
127.0.0.1:6379> lrange hobby 0 4
4) "pingpang"
4.ltrim 截取一定长度列表,从索引0取到2,删除其余的元素
127.0.0.1:6379> ltrim hobby 0 2
5.llen 查看长度
127.0.0.1:6379> llen hobby
(integer) 3
6.lpop 删除最左边一个元素
127.0.0.1:6379> lpop hobby
"read"
7.rpop 删除最右边一个元素
127.0.0.1:6379> rpop hobby
"sleep"
8.lpushx/rpushx key存在添加值,不存在不处理
127.0.0.1:6379> lpushx hobby "read"
(integer) 2
1.sadd 添加 元素127.0.0.1:6379> sadd zoo "tigger"(integer) 12.srem 删除元素127.0.0.1:6379> srem zoo "tigger"(integer) 13.sismember 判断是否为set的一个元素127.0.0.1:6379> sismember zoo "tigger"(integer) 14.smembers 返回集合所有的成员127.0.0.1:6379> smembers zoo1) "monkey"2) "pandas"3) "tigger"5.sdiff 返回一个集合和其他集合的差异127.0.0.1:6379> sdiff zoo zoo21) "tigger"2) "pandas"#找出集合zoo中有的,而zoo2中没有的元素6.sunion 返回几个集合的并集127.0.0.1:6379> sunion zoo zoo21) "tigger"2) "monkey"3) "pandas"4) "bird"5) "fox"
1.sadd 添加 元素
127.0.0.1:6379> sadd zoo "tigger"
2.srem 删除元素
127.0.0.1:6379> srem zoo "tigger"
3.sismember 判断是否为set的一个元素
127.0.0.1:6379> sismember zoo "tigger"
4.smembers 返回集合所有的成员
127.0.0.1:6379> smembers zoo
1) "monkey"
2) "pandas"
3) "tigger"
5.sdiff 返回一个集合和其他集合的差异
127.0.0.1:6379> sdiff zoo zoo2
1) "tigger"
#找出集合zoo中有的,而zoo2中没有的元素
6.sunion 返回几个集合的并集
127.0.0.1:6379> sunion zoo zoo2
2) "monkey"
3) "pandas"
4) "bird"
5) "fox"
用来保存需要排序的数据,例如排行榜,成绩,工资等。
实例:
#利用有序集合排序,排序学生的成绩127.0.0.1:6379> zadd score 70 "wang"(integer) 1127.0.0.1:6379> zadd score 60 "li"(integer) 1127.0.0.1:6379> zadd score 60 "liu"(integer) 1#zreverange倒叙 zrange正序127.0.0.1:6379> zrevrange score 0 -1 withscores1) "wang"2) "70"3) "liu"4) "60"5) "li"6) "60"127.0.0.1:6379> zrange score 0 -1 withscores1) "li"2) "60"3) "liu"4) "60"5) "wang"6) "70" zrem 移除127.0.0.1:6379> zrem score wang(integer) 1zcard 返回有序集合基数127.0.0.1:6379> zcard score(integer) 2#2个基数zscore 返回成员的score值127.0.0.1:6379> zscore score li"60"#查询score键,li对象的值zrank 返回有序集合中,成员的排名,默认按score,从小到大排序127.0.0.1:6379> zrank score wang(integer) 3#第三名 从0索引开始
#利用有序集合排序,排序学生的成绩
127.0.0.1:6379> zadd score 70 "wang"
127.0.0.1:6379> zadd score 60 "li"
127.0.0.1:6379> zadd score 60 "liu"
#zreverange倒叙 zrange正序
127.0.0.1:6379> zrevrange score 0 -1 withscores
1) "wang"
2) "70"
3) "liu"
4) "60"
5) "li"
6) "60"
127.0.0.1:6379> zrange score 0 -1 withscores
1) "li"
2) "60"
5) "wang"
6) "70"
zrem 移除
127.0.0.1:6379> zrem score wang
zcard 返回有序集合基数
127.0.0.1:6379> zcard score
#2个基数
zscore 返回成员的score值
127.0.0.1:6379> zscore score li
"60"
#查询score键,li对象的值
zrank 返回有序集合中,成员的排名,默认按score,从小到大排序
127.0.0.1:6379> zrank score wang
#第三名 从0索引开始
1.hset 设置散列值127.0.0.1:6379> hset news1 title "New1 title"(integer) 1127.0.0.1:6379> hset news1 content "This is first news"(integer) 12.hget 获取散列值127.0.0.1:6379> hget news1 content"This is first news"127.0.0.1:6379> hget news1 title"New1 title"3.hmset 设置多对散列表127.0.0.1:6379> hmset news2 title "New2 title" content "This is seconde news"OK4.hmget 获取多对散列值127.0.0.1:6379> hmget news2 title content1) "New2 title"2) "This is seconde news"5.hsetnx 如果散列已经存在,则不设置(防止覆盖key)# 1代表设置成功,0代表设置失败127.0.0.1:6379> hsetnx news2 title "news 2"(integer) 0127.0.0.1:6379> hsetnx news3 title "news 3"(integer) 16.hkeys 返回所有keys127.0.0.1:6379> hkeys news11) "content"2) "title"7.hvals 返回所有values127.0.0.1:6379> hvals news11) "This is first news"2) "New1 title"8.hlen 返回散列包含域(field)的数量127.0.0.1:6379> hlen news1(integer) 2127.0.0.1:6379> hlen news2(integer) 29.hdel 删除散列指定的域(field)127.0.0.1:6379> hdel news1 title(integer) 1127.0.0.1:6379> hget news1 title(nil)10.hexists 判断是否存在127.0.0.1:6379> hexists news1 title(integer) 0127.0.0.1:6379> hexists news1 content(integer) 1#0表示不存在,1表示存在
1.hset 设置散列值
127.0.0.1:6379> hset news1 title "New1 title"
127.0.0.1:6379> hset news1 content "This is first news"
2.hget 获取散列值
127.0.0.1:6379> hget news1 content
"This is first news"
127.0.0.1:6379> hget news1 title
"New1 title"
3.hmset 设置多对散列表
127.0.0.1:6379> hmset news2 title "New2 title" content "This is seconde news"
4.hmget 获取多对散列值
127.0.0.1:6379> hmget news2 title content
1) "New2 title"
2) "This is seconde news"
5.hsetnx 如果散列已经存在,则不设置(防止覆盖key)
# 1代表设置成功,0代表设置失败
127.0.0.1:6379> hsetnx news2 title "news 2"
(integer) 0
127.0.0.1:6379> hsetnx news3 title "news 3"
6.hkeys 返回所有keys
127.0.0.1:6379> hkeys news1
1) "content"
2) "title"
7.hvals 返回所有values
127.0.0.1:6379> hvals news1
1) "This is first news"
2) "New1 title"
8.hlen 返回散列包含域(field)的数量
127.0.0.1:6379> hlen news1
127.0.0.1:6379> hlen news2
9.hdel 删除散列指定的域(field)
127.0.0.1:6379> hdel news1 title
(nil)
10.hexists 判断是否存在
127.0.0.1:6379> hexists news1 title
127.0.0.1:6379> hexists news1 content
#0表示不存在,1表示存在
原文链接:http://www.cnblogs.com/xujunkai/p/11563620.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728