经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Redis » 查看文章
Part_one:Redis第一次接触
来源:cnblogs  作者:是阿凯啊  时间:2019/9/23 8:46:55  对本文有异议

1.redis学习

  • 数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失。

  • selenium操作浏览器时,要注意浏览器资源释放,方式内存泄露,崩溃

  • mysql是文件型数据库,默认持久化到硬盘上

  • redis 是内存型数据库

    1. 数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失selenium操作浏览器时,要注意浏览器资源释放,方式内存泄漏,崩溃。
    2. with opne() 默认close关闭文件句柄
    3. word工具,额米有保存前,数据放在内存里,保存后持久化到磁盘上,永久存储在mysql是文件型数据库,默认持久化到磁盘上

2.redis安装学习

  • yum安装,最简单,配置yum源,yum仓库才可以
  • 源码编译安装,指定安装路径,自定制第三方扩展模块功能
  • rpm软件包手动安装,很烂,手动解决依赖关系,不适用
  • 小拓展:ctrl +alt + f1~f7 f1是图形化(物理服务器的Linux界面)

1.redis安装步骤:

  1. 1.解决编译安装所需的依赖环境
  2. 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
  3. 2.在目标目录下 ,下载源代码包
  4. wget http://download.redis.io/releases/redis-4.0.10.tar.gz
  5. 解压:tar -zxvf -redis-4.0.10.tar.gz
  6. 3.执行./configure --prefix=/opt/redis/ #释放makefile,告诉gcc编译器,redis的安装路径
  7. 如果默认没有configure脚本,出现了makefile,直接make&&make install 安装即可
  8. 4.编译且安装
  9. make && make install
  • 小拓展
  1. #如果你发现云服务器被矿机攻击,有一个进程占用100%CPU资源!
  2. 解决:
  3. kill -9 杀死进程
  4. 检查定时任务
  5. crontab -l 检查定时任务
  6. crontab -e 编辑定时任务文件,可以删除,定时任务。
  7. 全局搜索病毒文件,删除它(注意恶意病毒,篡改了文件名,了解即可)
  8. find / -name 病毒文件
  9. 找到了 rm -rf 删除
  10. 如果 删除不掉,很有可能文件被加锁了
  11. lsattr filename.txt
  12. chattr -a filename #给文件去锁

2.编译完成后,即可使用redis

  1. 启动redis服务:
  2. redis-server
  3. 直接这样执行:
  4. 会出现不安全情况,容易被攻击

3.指定配置文件,Centos安全的启动redis服务端

  1. 1redis没有用户概念,redis只有密码
  2. 2redis默认在工作在保护模式下。不允许远程任何用户登录的(protected-mode
  • 更改启动端口

    1. port 6380 #更改默认启动端口
  • 添加redis密码

    1. requirepass xxxxxx #设置redis启动密码,xxxx是自定义的密码
  • 开启redis安全模式

    1. protected-mode yes #打开保护模式
- 示例演示 important!!!
  1. 1.第一步
  2. [root@xujunk safe_conf]#vim /safe_conf/redis.conf
  3. #在redis.conf配置信息如下
  4. bind 127.0.0.1
  5. protected-mode yes
  6. port 6379
  7. requirepass haohaio
  8. daemonize yes
  9. pidfile /var/run/redis_6379.pid
  10. loglevel notice
  11. logfile ""
  12. 2.用自己配置好redis.conf 开启redis
  13. [root@xujunk safe_conf]#redis-server /opt/my_redis/redis-4.0.10/safe_conf/redis.conf
  14. 3.查看redis启动状态:
  15. [root@xujunk safe_conf]#ps -ef |grep redis
  16. 4.redis-cli启动,haohaiyou是密码
  17. [root@xujunk safe_conf]#redis-cli -p 6400 -h 127.0.0.1 -a haohaiyou

4.过滤出配置文件有益的信息(取出空白行和注释行)

  • redis.conf
  1. #找出注释行的数据
  2. grep "^#" redis.conf
  3. #找出空行
  4. grep "^$"
  5. #找出除空白行 和 注释行 以外的行
  6. [root@xujunk redis-4.0.10]#grep -v "^#" redis.conf | grep -v "^$"
  7. #-v 作用取相反

5.指定配置文件启动:

  1. bind 192.168.182.130
  2. #绑定ip,如需要远程访问,需要填写服务器ip
  3. protected-mode yes #安全模式
  4. port 6800 #端口
  5. requirepass haohaio #密码
  6. daemonize yes
  7. #守护进程方式运行,后台运行
  8. pidfile /var/run/redis_6379.pid
  9. #进程id文件
  10. loglevel notice
  11. #日志等级
  12. logfile ""
  13. #日志文件
  14. slaveof
  15. #主从复制
  • 启动redis服务端:
  1. [root@xujunk redis-4.0.10]#redis-server redis.conf
  • 启动redis客户端
  1. [root@xujunk redis-4.0.10]#redis-cli -p 6379 -h 127.0.0.1
  • 查看redis 进程状态
  1. ps -ef|grep redis
  2. netstat -tunlp|grep redis
  3. #LISTEN 表示监听状态
  • 验证连接成功
  1. 客户端输入:
  2. 127.0.0.1:6379> ping
  3. 返回值:PONG

3.redis 数据结构

  • redis是一种高级的key:value存储系统,其中balue支持五种数据类型。
    • 字符串
    • 散列
    • 列表
    • 集合
    • 有序集合
  • 基本命令:

    1. 127.0.0.1:6379> keys * #查看所有的key
    2. 127.0.0.1:6379> type key #查看key的类型
    3. 127.0.0.1:6379> expire key seconds #过期时间
    4. 示例:
    5. >expire name "Tom" 10
    6. #表示10秒后 {"name":"Tom"}键值对将消失
    7. 127.0.0.1:6379> ttl key #查看key过期剩余时间 -2表示key已经不存在了
    8. 127.0.0.1:6379>persist key #取消key的过期时间 -1表示key存在,没有过期时间
    9. 127.0.0.1:6379>exists key #判断key存在 存在返回1 否则0
    10. 127.0.0.1:6379>exists key #判断key存在不? 存在返回1 否则0
    11. 127.0.0.1:6379>del key #删除key 返回1代表删除成功,返回0代表删除失败
    12. 127.0.0.1:6379>dbsize #计算当前库key的数量, 没有参数

1.字符串:

  • strings类型
  1. 1.set 设置key
  2. 127.0.0.1:6379> set k1 "v1"
  3. >>>OK
  4. 2.get 获取key
  5. 127.0.0.1:6379> get k1
  6. >>>"v1"
  7. 3.append 追加string
  8. 127.0.0.1:6379>append name ' dsb'
  9. >>> 6 #返回追加后字符串长度
  10. 4.mset 追加keystring
  11. 127.0.0.1:6379> mset u1 "xm" u2 "xg" u3 "xh"
  12. OK
  13. 5.mget 获取多个value
  14. 127.0.0.1:6379> mget u1 u2
  15. 1) "xm"
  16. 2) "xg"
  17. 6.del 删除key
  18. 127.0.0.1:6379> del k1
  19. (integer) 1
  20. 7. incr 递增 +1
  21. 127.0.0.1:6379> incr num
  22. (integer) 10
  23. 8.decr 递减-1
  24. 127.0.0.1:6379> decr num
  25. (integer) 9

2.list类型:

  • list类型为双向队列
  1. 1.lpush 从列表左边插入
  2. 127.0.0.1:6379>lpush hobby "sleep" "swim" "read"
  3. 2.lrange 获取一定长度的元素
  4. 127.0.0.1:6379> lrange hobby 0 3
  5. 1) "read"
  6. 2) "swim"
  7. 3) "sleep"
  8. 3.rpush 从列表右边插
  9. 127.0.0.1:6379> lrange hobby 0 4
  10. 1) "read"
  11. 2) "swim"
  12. 3) "sleep"
  13. 4) "pingpang"
  14. 4.ltrim 截取一定长度列表,从索引0取到2,删除其余的元素
  15. 127.0.0.1:6379> ltrim hobby 0 2
  16. OK
  17. 5.llen 查看长度
  18. 127.0.0.1:6379> llen hobby
  19. (integer) 3
  20. 6.lpop 删除最左边一个元素
  21. 127.0.0.1:6379> lpop hobby
  22. "read"
  23. 7.rpop 删除最右边一个元素
  24. 127.0.0.1:6379> rpop hobby
  25. "sleep"
  26. 8.lpushx/rpushx key存在添加值,不存在不处理
  27. 127.0.0.1:6379> lpushx hobby "read"
  28. (integer) 2

3.sets集合类型:

  • redis的集合,是一种无序的集合,集合中的元素没有先后顺序。
  • 集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:
  1. 1.sadd 添加 元素
  2. 127.0.0.1:6379> sadd zoo "tigger"
  3. (integer) 1
  4. 2.srem 删除元素
  5. 127.0.0.1:6379> srem zoo "tigger"
  6. (integer) 1
  7. 3.sismember 判断是否为set的一个元素
  8. 127.0.0.1:6379> sismember zoo "tigger"
  9. (integer) 1
  10. 4.smembers 返回集合所有的成员
  11. 127.0.0.1:6379> smembers zoo
  12. 1) "monkey"
  13. 2) "pandas"
  14. 3) "tigger"
  15. 5.sdiff 返回一个集合和其他集合的差异
  16. 127.0.0.1:6379> sdiff zoo zoo2
  17. 1) "tigger"
  18. 2) "pandas"
  19. #找出集合zoo中有的,而zoo2中没有的元素
  20. 6.sunion 返回几个集合的并集
  21. 127.0.0.1:6379> sunion zoo zoo2
  22. 1) "tigger"
  23. 2) "monkey"
  24. 3) "pandas"
  25. 4) "bird"
  26. 5) "fox"

4.有序集合(以Z开头的命令)

  • 用来保存需要排序的数据,例如排行榜,成绩,工资等。

  • 实例:

  1. #利用有序集合排序,排序学生的成绩
  2. 127.0.0.1:6379> zadd score 70 "wang"
  3. (integer) 1
  4. 127.0.0.1:6379> zadd score 60 "li"
  5. (integer) 1
  6. 127.0.0.1:6379> zadd score 60 "liu"
  7. (integer) 1
  8. #zreverange倒叙 zrange正序
  9. 127.0.0.1:6379> zrevrange score 0 -1 withscores
  10. 1) "wang"
  11. 2) "70"
  12. 3) "liu"
  13. 4) "60"
  14. 5) "li"
  15. 6) "60"
  16. 127.0.0.1:6379> zrange score 0 -1 withscores
  17. 1) "li"
  18. 2) "60"
  19. 3) "liu"
  20. 4) "60"
  21. 5) "wang"
  22. 6) "70"
  23. zrem 移除
  24. 127.0.0.1:6379> zrem score wang
  25. (integer) 1
  26. zcard 返回有序集合基数
  27. 127.0.0.1:6379> zcard score
  28. (integer) 2
  29. #2个基数
  30. zscore 返回成员的score
  31. 127.0.0.1:6379> zscore score li
  32. "60"
  33. #查询score键,li对象的值
  34. zrank 返回有序集合中,成员的排名,默认按score,从小到大排序
  35. 127.0.0.1:6379> zrank score wang
  36. (integer) 3
  37. #第三名 从0索引开始

5.哈希数据结构

  • 哈希结构就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必须 k1,取出k2
  • hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。
  • hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
  1. 1.hset 设置散列值
  2. 127.0.0.1:6379> hset news1 title "New1 title"
  3. (integer) 1
  4. 127.0.0.1:6379> hset news1 content "This is first news"
  5. (integer) 1
  6. 2.hget 获取散列值
  7. 127.0.0.1:6379> hget news1 content
  8. "This is first news"
  9. 127.0.0.1:6379> hget news1 title
  10. "New1 title"
  11. 3.hmset 设置多对散列表
  12. 127.0.0.1:6379> hmset news2 title "New2 title" content "This is seconde news"
  13. OK
  14. 4.hmget 获取多对散列值
  15. 127.0.0.1:6379> hmget news2 title content
  16. 1) "New2 title"
  17. 2) "This is seconde news"
  18. 5.hsetnx 如果散列已经存在,则不设置(防止覆盖key
  19. # 1代表设置成功,0代表设置失败
  20. 127.0.0.1:6379> hsetnx news2 title "news 2"
  21. (integer) 0
  22. 127.0.0.1:6379> hsetnx news3 title "news 3"
  23. (integer) 1
  24. 6.hkeys 返回所有keys
  25. 127.0.0.1:6379> hkeys news1
  26. 1) "content"
  27. 2) "title"
  28. 7.hvals 返回所有values
  29. 127.0.0.1:6379> hvals news1
  30. 1) "This is first news"
  31. 2) "New1 title"
  32. 8.hlen 返回散列包含域(field)的数量
  33. 127.0.0.1:6379> hlen news1
  34. (integer) 2
  35. 127.0.0.1:6379> hlen news2
  36. (integer) 2
  37. 9.hdel 删除散列指定的域(field
  38. 127.0.0.1:6379> hdel news1 title
  39. (integer) 1
  40. 127.0.0.1:6379> hget news1 title
  41. (nil)
  42. 10.hexists 判断是否存在
  43. 127.0.0.1:6379> hexists news1 title
  44. (integer) 0
  45. 127.0.0.1:6379> hexists news1 content
  46. (integer) 1
  47. #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

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号