Part_one:Redis第一次接触
程序员文章站
2022-10-30 10:27:17
1.redis学习 数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失。 selenium操作浏览器时,要注意浏览器资源释放,方式内存泄露,崩溃 mysql是文件型数据库,默认持久化到硬盘上 redis 是内存型数据库 2.redis安装学习 yum安装,最简单,配置yum源, ......
1.redis学习
数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失。
selenium操作浏览器时,要注意浏览器资源释放,方式内存泄露,崩溃
mysql是文件型数据库,默认持久化到硬盘上
-
redis 是内存型数据库
数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失selenium操作浏览器时,要注意浏览器资源释放,方式内存泄漏,崩溃。 with opne() 默认close关闭文件句柄 word工具,额米有保存前,数据放在内存里,保存后持久化到磁盘上,永久存储在mysql是文件型数据库,默认持久化到磁盘上
2.redis安装学习
- yum安装,最简单,配置yum源,yum仓库才可以
- 源码编译安装,指定安装路径,自定制第三方扩展模块功能
- rpm软件包手动安装,很烂,手动解决依赖关系,不适用
- 小拓展:ctrl +alt + f1~f7 f1是图形化(物理服务器的linux界面)
1.redis安装步骤:
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 #给文件去锁
2.编译完成后,即可使用redis
启动redis服务: redis-server 直接这样执行: 会出现不安全情况,容易被攻击
3.指定配置文件,centos安全的启动redis服务端
(1)redis没有用户概念,redis只有密码 (2)redis默认在工作在保护模式下。不允许远程任何用户登录的(protected-mode)
-
更改启动端口
port 6380 #更改默认启动端口
-
添加redis密码
requirepass xxxxxx #设置redis启动密码,xxxx是自定义的密码
-
开启redis安全模式
protected-mode yes #打开保护模式
- 示例演示 important!!!
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
4.过滤出配置文件有益的信息(取出空白行和注释行)
- redis.conf
#找出注释行的数据 grep "^#" redis.conf #找出空行 grep "^$" #找出除空白行 和 注释行 以外的行 [root@xujunk redis-4.0.10]#grep -v "^#" redis.conf | grep -v "^$" #-v 作用取相反
5.指定配置文件启动:
bind 192.168.182.130 #绑定ip,如需要远程访问,需要填写服务器ip protected-mode yes #安全模式 port 6800 #端口 requirepass haohaio #密码 daemonize yes #守护进程方式运行,后台运行 pidfile /var/run/redis_6379.pid #进程id文件 loglevel notice #日志等级 logfile "" #日志文件 slaveof #主从复制
- 启动redis服务端:
[root@xujunk redis-4.0.10]#redis-server redis.conf
- 启动redis客户端
[root@xujunk redis-4.0.10]#redis-cli -p 6379 -h 127.0.0.1
- 查看redis 进程状态
ps -ef|grep redis netstat -tunlp|grep redis #listen 表示监听状态
- 验证连接成功
客户端输入: 127.0.0.1:6379> ping 返回值:pong
3.redis 数据结构
- redis是一种高级的key:value存储系统,其中balue支持五种数据类型。
- 字符串
- 散列
- 列表
- 集合
- 有序集合
-
基本命令:
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.字符串:
- strings类型
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
2.list类型:
- list类型为双向队列
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 ok 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
3.sets集合类型:
- redis的集合,是一种无序的集合,集合中的元素没有先后顺序。
- 集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:
1.sadd 添加 元素 127.0.0.1:6379> sadd zoo "tigger" (integer) 1 2.srem 删除元素 127.0.0.1:6379> srem zoo "tigger" (integer) 1 3.sismember 判断是否为set的一个元素 127.0.0.1:6379> sismember zoo "tigger" (integer) 1 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" 2) "pandas" #找出集合zoo中有的,而zoo2中没有的元素 6.sunion 返回几个集合的并集 127.0.0.1:6379> sunion zoo zoo2 1) "tigger" 2) "monkey" 3) "pandas" 4) "bird" 5) "fox"
4.有序集合(以z开头的命令)
用来保存需要排序的数据,例如排行榜,成绩,工资等。
实例:
#利用有序集合排序,排序学生的成绩 127.0.0.1:6379> zadd score 70 "wang" (integer) 1 127.0.0.1:6379> zadd score 60 "li" (integer) 1 127.0.0.1:6379> zadd score 60 "liu" (integer) 1 #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" 3) "liu" 4) "60" 5) "wang" 6) "70" zrem 移除 127.0.0.1:6379> zrem score wang (integer) 1 zcard 返回有序集合基数 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索引开始
5.哈希数据结构
- 哈希结构就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必须 k1,取出k2
- hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。
- hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
1.hset 设置散列值 127.0.0.1:6379> hset news1 title "new1 title" (integer) 1 127.0.0.1:6379> hset news1 content "this is first news" (integer) 1 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" ok 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" (integer) 1 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 (integer) 2 127.0.0.1:6379> hlen news2 (integer) 2 9.hdel 删除散列指定的域(field) 127.0.0.1:6379> hdel news1 title (integer) 1 127.0.0.1:6379> hget news1 title (nil) 10.hexists 判断是否存在 127.0.0.1:6379> hexists news1 title (integer) 0 127.0.0.1:6379> hexists news1 content (integer) 1 #0表示不存在,1表示存在
上一篇: 流产后注意事项和饮食,身体健康最重要!
下一篇: 秋季养生粥有哪些做法