Redis

  1. Redis是一个开源的,先进的key-value存储。
  2. 它通常被称为数据结构服务器,因为键可以包含字符串,哈希,链表,集合和有序集合。

Redis 简介

  1. Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
  2. Redis 与其他 key - value 缓存产品有以下三个特点:
  3. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  4. Redis不仅仅支持简单的key-value类型的数据,同时还提供listsetzsethash等数据结构的存储。
  5. Redis支持数据的备份,即master-slave模式的数据备份。(主--从)

Redis 优势

  1. 性能极高 Redis能读的速度是110000次/s,写的速度是81000次/s
  2. 丰富的数据类型 Redis支持二进制案例的 Strings, Lists, Hashes, Sets Ordered Sets 数据类型操作
  3. 原子 Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  4. 丰富的特性 Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

  1. Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
  2. Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  3. Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,
  4. 因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,
  5. 在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
  6. 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis 安装

Window 下安装

  1. 一.安装redis服务
  2. Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,
  3. 这里我们下载 32 Redis-Windows-32bit.zip压缩包到 C 盘,解压后,将文件夹重新命名为redis
  4. 打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf
  5. 后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。
  6. 这时候另再开启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。
  7. 切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379
  8. 按照上面的运行是可以的,但是这样就会造成两个命令行窗口都要开启,特别是服务器端,一旦关闭了那么客户端就无法使用了,那么这样可以把redis服务安装到windows服务里面
  9. Redis是可以安装成windows服务的,开机自启动,命令如下:
  10. redis-server --service-install redis.windows.conf
  11. Redis并没有启动,启动命令如下:
  12. redis-server --service-start
  13. 停止命令:
  14. redis-server --service-stop
  15. 卸载命令:
  16. redis-server --service-uninstall
  17. 二.安装php redis扩展
  18. 1.phpinfo检测是否开启
  19. 2.php扩展目录 extension_dir
  20. php_redis.dll放置到php扩展目录下
  21. 3.php配置文件修改
  22. extension=php_redis.dll
  23. 4.重启服务apache服务

Ubuntu 下安装

  1. Ubuntu 系统安装 Redi 可以使用以下命令:
  2. $sudo apt-get update
  3. $sudo apt-get install redis-server
  4. 启动 Redis
  5. $ redis-server
  6. 查看 redis 是否启动?
  7. $ redis-cli
  8. 以上命令将打开以下终端:
  9. redis 127.0.0.1:6379>
  10. 127.0.0.1 是本机 IP 6379 redis 服务端口。现在我们输入 PING 命令。
  11. redis 127.0.0.1:6379> ping
  12. PONG
  13. 以上说明我们已经成功安装了redis

Redis 数据类型

  1. Redis支持五种数据类型:
  2. string(字符串)
  3. list(列表)
  4. set(集合)
  5. zset(有序集合)
  6. hash(哈希)

String(字符串)

  1. stringredis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value
  2. string类型是二进制安全的。意思是redisstring可以包含任何数据。比如jpg图片或者序列化的对象
  3. string类型是Redis最基本的数据类型,一个键最大能存储512MB
实例
  1. redis 127.0.0.1:6379> SET name "runoob"
  2. OK
  3. redis 127.0.0.1:6379> GET name
  4. "runoob"
  5. 在以上实例中我们使用了 Redis SET GET 命令。键为 name,对应的值为 runoob
  6. 注意:一个键最大能存储512MB
  7. --------------------------------------------
  8. set 命令:设置一个键和值,键存在则只覆盖,返回ok
  9. > set
  10. 例如: >set name zhangsan
  11. get 命令:获取一个键的值,返回值
  12. > get 例如:>get name
  13. setnx命令:设置一个不存在的键和值(防止覆盖),
  14. > setnx 若键已存在则返回0表示失败
  15. setex命令:设置一个指定有效期的键和值(单位秒)
  16. > setex [有效时间]
  17. 例如: >setex color 10 red
  18. 不写有效时间则表示永久有效,等价于set
  19. setrange命令:替换子字符串 (替换长度由子子串长度决定)
  20. > setrange 位置 子字串
  21. > setrange name 4 aa name键对应值的第4个位置开始替换
  22. mset命令:批量设置键和值,成功则返回ok
  23. > mset 1 1 2 2 3 3 ....
  24. msetnx命令:批量设置不存在的键和值,成功则返回ok
  25. > msetnx 1 1 2 2 3 3 ....
  26. getset命令:获取原值,并设置新值
  27. getrange命令:获取指定范围的值
  28. >getrange 0 4 //获取指定0到4位置上的值
  29. mget命令: 批量获取值
  30. >mget 1 2 3....
  31. incr命令: 指定键的值做加加操作,返回加后的结果。
  32. > 例如: >incr kid
  33. incrby命令: 设置某个键加上指定值
  34. > incrby m //其中m可以是正整数或负整数
  35. decr命令: 指定键的值做减减操作,返回减后的结果。
  36. > decr 例如: >decr kid
  37. decrby命令: 设置某个键减上指定值
  38. > decrby m //其中m可以是正整数或负整数
  39. append命令:给指定key的字符串追加value,返回新字符串值的长度
  40. >append 追加字串
  41. strlen求长度
  42. >strlen 键名 //返回对应的值。

List(列表)

  1. Redis 列表是简单的字符串列表,按照插入顺序排序。
  2. 你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
实例
  1. redis 127.0.0.1:6379> lpush runoob redis
  2. (integer) 1
  3. redis 127.0.0.1:6379> lpush runoob mongodb
  4. (integer) 2
  5. redis 127.0.0.1:6379> lpush runoob rabitmq
  6. (integer) 3
  7. redis 127.0.0.1:6379> lrange runoob 0 10
  8. 1) "rabitmq"
  9. 2) "mongodb"
  10. 3) "redis"
  11. redis 127.0.0.1:6379>
  12. 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
  13. --------------------------------------------
  14. list即可以作为“栈”也可以作为"队列"
  15. 操作:
  16. >lpush list1 "world" //在list1头部压入一个字串
  17. >lpush list1 "hello" // 在list1头部压入一个字串
  18. >lrange list1 0 -1 //获取list1中内容
  19. 0:表示开头 -1表示结尾。
  20. >rpush list2 "world" //在list2尾部压入一个字串
  21. >rpush list2 "hello" // 在list2尾部压入一个字串
  22. >lrange list2 0 -1 //获取list2中内容
  23. 0:表示开头 -1表示结尾。
  24. >linsert list2 before hello there
  25. key对应list的特定位置前或后添加字符串
  26. >lset list2 1 "four"
  27. 修改指定索引位置上的值
  28. >lrem list2 2 "hello" //删除前两个hello值
  29. >lrem list2 -2 "hello" //删除后两个hello值
  30. >lrem list2 0 "hello" //删除所有hello值
  31. >ltrim mylist8 1 3 //删除此范围外的值
  32. >lpop list2 //从list2的头部删除元素,并返回删除元素
  33. >rpop list2 //从list2的尾部删除元素,并返回删除元素
  34. >rpoplpush list1 list2 //将list1的尾部一个元素移出到list2头部。并返回
  35. >lindex list2 1 //返回list2中索引位置上的元素
  36. >llen list2 //返回list2上长度

Set(无序集合)

  1. RedisSetstring类型的无序集合。
  2. 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  3. sadd 命令
  4. 添加一个string元素到,key对应的set集合中,
  5. 成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。
  6. sadd key member
实例
  1. redis 127.0.0.1:6379> sadd runoob redis
  2. (integer) 1
  3. redis 127.0.0.1:6379> sadd runoob mongodb
  4. (integer) 1
  5. redis 127.0.0.1:6379> sadd runoob rabitmq
  6. (integer) 1
  7. redis 127.0.0.1:6379> sadd runoob rabitmq
  8. (integer) 0
  9. redis 127.0.0.1:6379> smembers runoob
  10. 1) "rabitmq"
  11. 2) "mongodb"
  12. 3) "redis"
  13. 注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
  14. 集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
  15. -------------------------------
  16. >sadd myset "hello" //向myset中添加一个元素
  17. 成功返回1,失败(重复)返回0
  18. >smembers myset //获取myset中的所有元素(结果是无序的)
  19. >srem myset "one" //从myset中删除一个one
  20. 成功返回1,失败(不存在)返回0
  21. >spop myset //随机返回并删除myset中的一个元素
  22. >srandmember myset //随机获取myset中的一个元素,但是不删除
  23. > smove myset1 myset2 zhangsan:将myset1zhangsan移动到myset2
  24. > scard myset1 返回myset1的个数
  25. > sismember myset zhangsan:判断张三是否在myset
  26. >sdiff myset1 myset2 //返回两个集合的差集
  27. myset1为标准,获取myset2中不存在的。
  28. >sdiffstore dstset myset1 myset2 ...// 返回所有集合的差集,并保存到dstset中
  29. >sinter myset1 myset2 myset3... // 返回N个集合中的交集
  30. >sinterstore dstset myset1 myset2 ... // 返回N个集合的交集并存储到dstset中
  31. > sunion myset1 myset2 ...//返回所有集合的并集
  32. > sunionstore dstset myset1 myset2// 返回所有集合的并集,并存储到dstset中

zset(sorted set:有序集合)

  1. Redis zset set 一样也是string类型元素的集合,且不允许重复的成员。
  2. 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
  3. zset的成员是唯一的,但分数(score)却可以重复。
  4. zadd 命令
  5. 添加元素到集合,元素在集合中存在则更新对应score
  6. zadd key score member
实例
  1. redis 127.0.0.1:6379> zadd runoob 0 redis
  2. (integer) 1
  3. redis 127.0.0.1:6379> zadd runoob 0 mongodb
  4. (integer) 1
  5. redis 127.0.0.1:6379> zadd runoob 0 rabitmq
  6. (integer) 1
  7. redis 127.0.0.1:6379> zadd runoob 0 rabitmq
  8. (integer) 0
  9. redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000
  10. 1) "redis"
  11. 2) "mongodb"
  12. 3) "rabitmq"
  13. ----------------------------------------
  14. > zadd zset 1 one zset中添加one,排序为1排序
  15. > zrem zset one:删除zsetone
  16. > zincrby zset 2 one:如果one存在,则顺序增加2,如果one不存在,那么就是2
  17. > zrank zset one:返回one zset中排名(从小到大的排序)
  18. > zrevrank zset one:返回onezset中排名(从大到小的排序)
  19. > zrange zset 0 -1 withscores:根据score排序(根据score从小到大排序)
  20. > zrevrange zset 0 -1 withscores:根据score排序(根据score从大到小排序)
  21. > zrangebyscore zset 2 3 withscores:返回集合中score在给定区间的元素(包含25
  22. > zcount zset 2 3:返回集合中给定区间的数量
  23. > zcard zset:返回集合中元素的个数
  24. > zscore zset one:返回one元素的score
  25. > zremrangebyrank zset 3 3:删除集合中排名在给定区间的元素
  26. > zremrangebyscore zset 1 2:将zset中从小到大排序结果的score1-2之间的删除

Hash(哈希)

  1. Redis hash 是一个键值对集合。
  2. Redis hash是一个string类型的fieldvalue的映射表,hash特别适合用于存储对象。
实例
  1. 127.0.0.1:6379> HMSET user:1 username runoob password runoob points 200
  2. OK
  3. 127.0.0.1:6379> HGETALL user:1
  4. 1) "username"
  5. 2) "runoob"
  6. 3) "password"
  7. 4) "runoob"
  8. 5) "points"
  9. 6) "200"
  10. 以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。
  11. 实例中我们使用了 Redis HMSET, HGETALL 命令,user:1 为键值。
  12. 每个 hash 可以存储 232 -1 键值对(40多亿)。
  13. ------------------------------------------
  14. hset命令:设置一个哈希表的键和值
  15. >hset hash
  16. 如:>hset user:001 name zhangsan
  17. hget命令: 获取执行哈希名中的键对应值
  18. hsetnx命令:设置一个哈希表中不存在的键和值
  19. >hsetnx hash //成功返回1,失败返回0
  20. 如:>hsetnx user:001 name zhangsan
  21. hmset命令:hmset user:001 username zhangsan age 20 sex 1 批量设置
  22. hmget user:001 username age sex:批量获取值
  23. >hexists user:001 name //是否存在, 若存在返回1
  24. >hlen user:001 //获取某哈希user001名中键的数量
  25. >hdel user:001 name //删除哈希user:001 中name键
  26. >hkeys user:002 //返回哈希名为user:002中的所有键。
  27. >hvals user:002 //返回哈希名为user:002中的所有值。
  28. >hgetall user:002 //返回哈希名为user:002中的所有键和值。

Redis高级实用特性

  1. 安全性:为Redis添加密码

  1. 警告:因为redis 速度相当快,所以在一台比较好的服务器下,
  2. 一个外部的用户可以在一秒钟进行150K 次的密码尝试,
  3. 这意味着你需要指定非常非常强大的密码来防止暴力破解。
  4. 1.进入配置文件:
  5. vi /usr/local/redis/etc/redis.conf
  6. 设置:requirepass redis的密码
  7. 2. 重启服务:
  8. # ./redis-cli shutdown 执行关闭
  9. # ./redis-server /usr/local/redis/etc/redis.conf 启动
  10. 3. 登录(两种)
  11. # ./redis-cli 客户端命令链接服务器
  12. >auth 密码值 //授权后方可使用
  13. # ./redis-cli -a 密码 //连接时指定密码来进行授权

Redis数据库-基础篇的更多相关文章

  1. 关于Redis数据库 ---- 基础篇

    Redis数据库也被称为数据结构数据库,因为存储基于key-value模式. 其中,value值可以为字符串(string),哈希(map),列表(list),集合(set)和有序集合(zset). ...

  2. redis数据库基础篇

    一.Redis介绍 Redis 是一个高性能的key-value数据格式的内存缓存,NoSQL数据库.NOSQL:not only sql,泛指非关系型数据库.关系型数据库: (mysql, orac ...

  3. 小白也能看懂的Redis教学基础篇——朋友面试被Skiplist跳跃表拦住了

    各位看官大大们,双节快乐 !!! 这是本系列博客的第二篇,主要讲的是Redis基础数据结构中ZSet(有序集合)底层实现之一的Skiplist跳跃表. 不知道那些是Redis基础数据结构的看官们,可以 ...

  4. 小白也能看懂的Redis教学基础篇——做一个时间窗限流就是这么简单

    不知道ZSet(有序集合)的看官们,可以翻阅我的上一篇文章: 小白也能看懂的REDIS教学基础篇--朋友面试被SKIPLIST跳跃表拦住了 书接上回,话说我朋友小A童鞋,终于面世通过加入了一家公司.这 ...

  5. python-MySQL数据库--- 基础篇

    MySQL数据库基础 数据库系统(database system) 1.数据库系统(database system)         数据库系统是计算机系统中一种专门管理数组资源的系统,数据库存储的是 ...

  6. 小白也能看懂的Redis教学基础篇——redis神秘的数据结构

    各位看官大大们,周末好! 作为一个Java后端开发,要想获得比较可观的工资,Redis基本上是必会的(不要问我为什么知道,问就是被问过无数次).那么Redis是什么,它到底拥有什么神秘的力量,能获得众 ...

  7. mysql数据库( 基础篇加破解)

    1.数据库(Database,DB)是按照数据结构来组织.存储和管理数据的,并且是建立在计算机存储设备上的仓库 2.什么是数据库:(用来存储数据的仓库) 数据库:(cs架构套接字) 数据库管理软件分类 ...

  8. 数据库 基础篇3(mysql语法)

    4 数据库管理(接上篇) 4.1 查询所有数据库 mysql> show databases; +--------------------+ | Database           | +-- ...

  9. Redis数据库 : 基础

    设置密码: /etc/redis/redis.conf 文件把 requirepass 取消注释并设置密码 取消只能本地登录的bind 同上面的配置文件 把 bind一行注释掉 带密码登录: redi ...

随机推荐

  1. xftp xshell 个人下载官网

    https://www.netsarang.com/zh/xftp-download/

  2. python3-filter

    Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是 ...

  3. Message相关函数对比

      SendMessage PostMessage  过程类型 同步过程:等待其他程序处理消息完了之后才返回,继续执行 异步过程:只把消息放入队列,不管其他程序是否处理都返回,然后继续执行 返回值 表 ...

  4. CSS3 nth-of-type(n)选择器 last-of-type选择器 nth-last-of-type(n)选择器 CSS3 only-child选择器 only-of-type选择器

    CSS3 nth-of-type(n)选择器 “:nth-of-type(n)”选择器和“:nth-child(n)”选择器非常类似,不同的是它只计算父元素中指定的某种类型的子元素.当某个元素中的子元 ...

  5. css3 动画 Transition

      CSS Transition 1.1 基本用法 在CSS 3引入Transition(过渡)这个概念之前,CSS是没有时间轴的.也就是说,所有的状态变化,都是即时完成. 上面是一个演示,当鼠标放置 ...

  6. $2019$ 暑期刷题记录1:(算法竞赛DP练习)

    $ 2019 $ 暑期刷题记录: $ POJ~1952~~BUY~LOW, BUY~LOWER: $ (复杂度优化) 题目大意:统计可重序列中最长上升子序列的方案数. 题目很直接的说明了所求为 $ L ...

  7. git怎样删除未监视的文件untracked files ?

    git怎样删除未监视的文件untracked files 需要添加到.gitignore文件 # 删除 untracked files git clean -f # 连 untracked 的目录也一 ...

  8. content is not supported outside 'script" or asp content' region

    https://stackoverflow.com/questions/48915080/asp-net-content-is-not-supported-outside-the-script-or- ...

  9. java 图片裁剪代码

    package com.actionsoft.apps.addons.invoice.pc.test; import java.awt.image.BufferedImage;import java. ...

  10. MongoDB性能分析

    # mongostat --host=100.150.2.12 --port=27017 --authenticationDatabase=admin --username=root --passwo ...