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表示存在

Part_one:Redis第一次接触的更多相关文章

  1. 第一次接触终极事务处理——Hekaton

    在这篇文章里,我想给出如何与终极事务处理(Extreme Transaction Processing (XTP) )的第一次接触,即大家熟知的Hakaton.如果你想对XTP有个很好的概况认识,我推 ...

  2. [译]与TensorFlow的第一次接触(三)之聚类

    转自 [译]与TensorFlow的第一次接触(三)之聚类 2016.08.09 16:58* 字数 4316 阅读 7916评论 5喜欢 18 前一章节中介绍的线性回归是一种监督学习算法,我们使用数 ...

  3. 第一次接触FPGA至今,总结的宝贵经验

    从大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表.抢答器.密码锁等实验时那个兴奋劲.当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus ...

  4. Hybird App(一)----第一次接触

    App你知道多少 一 什么是Native App 长处 缺点 二 什么是Web App 长处 缺点 三 什么是Hybrid App 长处 缺点 四 Web AppHybrid AppNative Ap ...

  5. 第一次接触C++------感触

    2018/09/24 上大学第一次接触C++,感觉还挺有趣的. C语言是计算机的一门语言,顾名思义,语言嘛,有它自己独特的语法. 第一次用C++敲代码,觉得还挺不错的,可以从中找到乐趣.咏梅老师布置的 ...

  6. 孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase

    孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase (完整学习过程屏幕记录视频地址在文末) 之前对关系型数据库的学习告一段落,虽然能力所限没有能够完全完成理想中的所有数据库操 ...

  7. 百度地图API的第一次接触

    因为项目的需求,第一次接触了百度API. 第一步:引用百度地图API的脚本 如果在局域网环境中,要把地图文件和js文件都要下载下来 <script type="text/javascr ...

  8. 第一次接触数据库(SQLite)

    第一次接触,学了创建列表 + 行的删除 + 内容的更改 + 删除列表 第一次接触要知道一些基本知识 NULL(SQL) = Nnoe(python)  #空值 INTEGER = int  #整数 R ...

  9. .NET 下第一次接触Redis数据库

    关于Redis 1.简介 Redis是著名的NOSQL(Not Only SQL)数据库,是键值对结构.(我只用过键值对结构的) 他为存储键值对做了优化,在大型网站中应用广泛.Redis提供了数据的自 ...

随机推荐

  1. 2019暑假Java学习笔记(三)

    目录 面向对象 对象 构造方法 引用与对象实例 static final 封装 this 继承 super 方法重载与重写 多态 抽象类 接口 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 ...

  2. 集成了SSM框架的系统怎么做测试?

    1.首先在测试文件夹下新建一个测试基类BaseTest BaseTest中的代码如下: package wbl_ssm_blog.mapper; import org.junit.Test; impo ...

  3. 【大数据】安装关系型数据库MySQL 安装大数据处理框架Hadoop

    作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 1.安装Mysql 使用命令  sudo apt-get ins ...

  4. 安装EOS合约工具eosio.cdt

    安装: 安装完之后 会产生 eosio-cpp_, eosio-cc, eosio-ld, eosio-pp, and _eosio_abigen (These are the C++ compile ...

  5. Web.Config配置文件中customErrors元素的使用方法

    在Web.Config配置文件中,customErrors元素提供有关ASP.NET 应用程序自定义错误消息的信息. 先看一下配置结构的示例: <configuration>   < ...

  6. null undefined NaN

    数据类型 6大基本 Number  String Boolean Undefined Null.  Symbol (ES6)   3大引用类型 object array Function Regexp ...

  7. pytorch ImageFolder的覆写

    在为数据分类训练分类器的时候,比如猫狗分类时,我们经常会使用pytorch的ImageFolder: CLASS torchvision.datasets.ImageFolder(root, tran ...

  8. Cisco设备配置SSH登录

    一 试验拓扑 二 Server配置 ①配置hostname和domain name 因为rsa的秘钥是用hostname和domain name产生的 Router(config)#host Serv ...

  9. 【非lodop的】JS和html相关博文索引

    JS: eval()方法:JS-JAVASCRIPT的eval()方法. Date()对象.getFullYear() 方法.getDate()方法.console.dir()方法:LODOP打印用J ...

  10. MySQL之备份

    MySQL备份和备份 备份/还原 冷备:需要停止当前正在运行mysqld,然后直接拷贝或打包数据文件. 半热备:mysqldump+binlog --适合数据量比较小的应用 在线热备:AB复制 --实 ...