笔记-数据库-redis

1.      redis简介

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

它支持多种类型的数据结构,如 strings,hashes,lists,sets,有序集合sorted sets 。

数据库已经有很多了 ,db2,oracle,mysql,为什么还需要redis呢?

设计源自需求,redis的面对的需求是跨程序的内存级别的数据共享和管理,简单来说,有一小部分数据需要能够拥有内存速度级别的快速访问,又要能够跨程序访问,具有一定管理功能,最好还能够在需要的时候可以向硬盘写入和读取;

实现方法就是内存数据库了,redis是其中一种实现模式,类似的还有memcached。

总而言之,redis是一款优秀的nosql(非关系型),key-vlaue,内存级别的数据库!redis是单线程,操作是安全的。

常用场景是热数据,计数器,队列,分布式锁,最新列表等。

1.1.    redis优点

  1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  3. 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

2.      redis数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

  1. String(字符串)

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

  1. Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

每个 hash 可以存储 2^32 -1 键值对(40多亿)。

  1. List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

列表最多可存储 2^32 - 1 元素 (4294967295, 每个列表可存储40多亿)。

  1. Set(集合)

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

sadd 命令

添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

  1. zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

zadd 命令

添加元素到集合,元素在集合中存在则更新对应score

3.      redis 安装、启动及连接

3.1.    安装

3.1.1.   windows环境

  1. 下载安装包;
  2. 解压,进入目录;
  3. cmd下执行redis-server.exe redis.windows.conf

3.1.2.   linux环境

  1. 下载安装包;
  2. tar –xzf redis-….gz
  3. cd redis….
  4. make
  5. .src/redis-server

3.2.    start redis及连接

启动redis-server

连接/查看是否启动成功redis-cli

4.      数据库管理

4.1.    启动/关闭/查看状态

  1. 启动:redis-server redis-conf
  2. 关闭:redis-cli shutdown
  3. 查看是否运行:ps aux|grep redis
  4. 设置密码后,上述关闭命令无效:

redis-cli -a [password]

回车后输入:shutdown

即可关闭redis,输入exit 退出。

4.2.    连接

本地连接数据库:redis-cli

远程连接:redis-cli  –h 192.168.. –p 6379

4.3.    配置管理

redis配置文件是redis-conf;

4.3.1.   远程访问管理

需要做两点配置,首先将protected-mode 置为no;然后注释或修改访问限定IP

bind项。

4.3.2.   添加访问密码

  1. 添加密码

在配置文件中找到requirepass,添加密码即可

格式是requirepass password

注意,重启后可能启动redis失败,报错为打不开redis.conf,在启动时输入文件全路径即可。

  1. 带密码访问

连接命令不变,但连接后执行命令时会报错:(error) NOAUTH Authentication required.

使用auth password命令进行授权即可。

5.      数据操作/管理命令

5.1.    键命令

命令的基本语法如下:

command key_name

  1. keys pattern 查看符合模式的键;
  2. del keyname 删除键
  3. rename keyname newkeyname      修改键名
  4. type key 返回key的类型
  5. dump key 序列化给定的key,返回序列化后的值;
  6. exists key 是否存在key
  7. expire key seconds 为key设定过期时间,单位秒;
  8. expireat key timestamp 设置过期时间,timestamp是unix时间戳;
  9. pexpire key milliseconds 设置过期时间,单位毫秒;
  10. move key db 将key移动到指定数据库db中;
  11. persist key 移除过期时间;
  12. pttl key 返回剩余过期时间,单位毫秒;
  13. ttl key返回剩余过期时间,单位秒;
  14. randomkey 从当前数据库中随机返回一个key;
  15. renamenx key newkey 仅当newkey不存在时,将key改名为newkey;

5.2.    string命令

键命令的基本语法如下:

command key_name

  1. set key value
  2. get key
  3. getrange key start end
  4. getset key value 将key的值设为value,并返回旧值;
  5. getbit key offset
  6. mget key1 [key2] 获取多个key的值
  7. setbit key offset value
  8. setex key seconds value 将value关联到key,并将key的过期时间设置为seconds,单位为秒;
  9. setnx key value 只有在key不存在的时候设置key的值;
  10. setrange key offset value
  11. strlen key
  12. mset key value [key value] 同时设置一个或多个key的值;
  13. msetnx key value [key value] 同时设置一个或多个key的值,当且仅当所有key不存在;
  14. psetex key milliseconds value 类似setex,但单位是毫秒;
  15. incr key  将key中储存的数字加1;
  16. incrby key increment
  17. incrbyfloat key increment
  18. decr key 数值减1
  19. append key value

5.3.    hash命令

redis hash是一个string类型的field和value的映射表;

  1. hdel key field1 [field2]
  2. hexists key field
  3. hget key field
  4. hgetall key
  5. hincrby key field increment 为key中指定字段的整数值增量increment;
  6. hincrbyfloat key field incrment
  7. hkeys key 获取key所有的field
  8. hlen key
  9. hmget key field1 [field2]
  10. hmset key field1 value1 [field2 value2]
  11. hset key field value
  12. hsetnx key field value
  13. hvals key 获取哈希表中所有值
  14. hscan key cursor [match pattern ] [count count] 迭代哈希表中的键值对;

5.4.    列表命令

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

  1. blpop key1 [key2] timeout       移出并获取列表的第一个元素,如果列表没有元素会阻塞至超时或有元素;
  2. brpop key1 [key2] timeout 与上一命令类似,不过移出最后一个元素;
  3. brpoppush source destination timeout   从列表中弹出一个值,将弹出的元素插入另外一个列表并返回它,如无元素阻塞至超时;
  4. lindex key index 通过索引获取列表中的元素;
  5. linsert key before|after pivot value 在列表的元素前/后插入元素
  6. llen key
  7. lpop key
  8. lpush key value [value2]
  9. lpushx key value
  10. lrange key start stop
  11. lrem key count value
  12. lset key index value
  13. ltrim key start stop     修剪列表,只保留指定区间内的元素;
  14. rpop key
  15. rpoplpush source destination
  16. rpush key value [value2]
  17. rpushx key value

5.5.    set

redis set是strin类型的无序集合,集合成员是唯一的。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

  1. sadd key member1 [member2] 添加成员
  2. scard key       获取成员数
  3. sdiff key [key2]     返回给定所有集合的差集
  4. sdiffstore destination key1 [key2] 返回给定集合的差集并存储在destination中;
  5. sinter key1 [key2] 返回给定集合的交集;
  6. sinterstore destination key1 [key2]
  7. sismember key member 判断member是否集合key的成员;
  8. smembers key 返回集合所有成员;
  9. smove source destintion member   将member元素从source移动到destination
  10. spop key 随机移除并返回key中一个元素;
  11. srandmember key [count] 随机返回集合中一个或多个元素
  12. srem key member1 [member2] 移除集合中一个或多个成员;
  13. sunion key1 [key2] 返回给定集合的并集
  14. sunionstore destination key1 [key2]
  15. sscan key cursor [match pattern] [count count]

5.6.    sorted set

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

1

ZADD key score1 member1 [score2 member2] 
向有序集合添加一个或多个成员,或者更新已存在成员的分数

2

ZCARD
key 
获取有序集合的成员数

3

ZCOUNT key min
max 
计算在有序集合中指定区间分数的成员数

4

ZINCRBY key
increment member 
有序集合中对指定成员的分数加上增量 increment

5

ZINTERSTORE
destination numkeys key [key ...] 
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

6

ZLEXCOUNT key
min max 
在有序集合中计算指定字典区间内成员数量

7

ZRANGE key start
stop [WITHSCORES] 
通过索引区间返回有序集合成指定区间内的成员

8

ZRANGEBYLEX
key min max [LIMIT offset count] 
通过字典区间返回有序集合的成员

9

ZRANGEBYSCORE
key min max [WITHSCORES] [LIMIT] 
通过分数返回有序集合指定区间内的成员

10

ZRANK key
member 
返回有序集合中指定成员的索引

11

ZREM key
member [member ...] 
移除有序集合中的一个或多个成员

12

ZREMRANGEBYLEX
key min max 
移除有序集合中给定的字典区间的所有成员

13

ZREMRANGEBYRANK
key start stop 
移除有序集合中给定的排名区间的所有成员

14

ZREMRANGEBYSCORE
key min max 
移除有序集合中给定的分数区间的所有成员

15

ZREVRANGE key
start stop [WITHSCORES] 
返回有序集中指定区间内的成员,通过索引,分数从高到底

16

ZREVRANGEBYSCORE
key max min [WITHSCORES] 
返回有序集中指定分数区间内的成员,分数从高到低排序

17

ZREVRANK key
member 
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

18

ZSCORE key
member 
返回有序集中,成员的分数值

19

ZUNIONSTORE
destination numkeys key [key ...] 
计算给定的一个或多个有序集的并集,并存储在新的 key 中

20

ZSCAN key cursor
[MATCH pattern] [COUNT count] 
迭代有序集合中的元素(包括元素成员和元素分值)

附录

6.     
其它

6.1.   
redis与memcached的区别

  1. redis与 memcached相比,redis支持key-value数据类型,同事支持list、set、hash等数据结构的存储。
  2. redis支持数据的备份,即master-slave模式的数据备份。
  3. redis支持数据的持久化。
  4. redis在很多方面支持数据库的特性,可以这样说他就是一个数据库系统,而memcached只是简单地K/V缓存。
  5. 它们在性能方面差别不是很大,读取方面尤其是针对批量读取性能方面memcached占据优势。当然redis也有他的优点,如持久性、支持更多的数据结构。
  6. 所以在选择方面如果有持久方面的需求或对数据类型和处理有要求的应该选择redis。
  7. 如果简单的key/value 存储应该选择memcached。

笔记-数据库-redis的更多相关文章

  1. SpringBoot学习笔记:Redis缓存

    SpringBoot学习笔记:Redis缓存 关于Redis Redis是一个使用ANSI C语言编写的免费开源.支持网络.可基于内存亦可以持久化的日志型.键值数据库.其支持多种存储类型,包括Stri ...

  2. redis相关笔记(三.redis设计与实现(笔记))

    redis笔记一 redis笔记二 redis笔记三 1.数据结构 1.1.简单动态字符串: 其属性有int len:长度,int free:空闲长度,char[] bur:字符数组(内容) 获取字符 ...

  3. SQL笔记 --- 数据库设计步骤(转)

    SQL笔记 --- 数据库设计步骤 目录 总体设计过程需求分析概念结构设计逻辑结构设计数据库物理设计数据库实施数据库运行和维护 总体设计过程 0 » 下一篇:vim 命令集 posted @ 2012 ...

  4. 缓存数据库-redis数据类型和操作(list)

    转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...

  5. linux --- 8. mysql数据库,redis 数据库

    一. mysql 数据库 1.安装方式 ①yum安装 ②源代码编译安装 ③rpm包安装 yum安装的前提条件,是准备好yum源,可以选择163源,清华源,阿里云源,等等等 .安装mariadb的yum ...

  6. 涂抹mysql笔记-数据库中的权限体系

    涂抹mysql笔记-数据库中的权限体系<>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确.mysql验证用户需要检查3项值:用户名.密码和主机来源(user.password. ...

  7. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  8. MySQL学习笔记-数据库内存

    数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...

  9. MySQL学习笔记-数据库后台线程

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

随机推荐

  1. win8.1x64下完美运行IE6

    IE6我相信是所有前端人员永远都绕不过去的坎,操作的版本越来越高,离xp越来越远,难道你还在win8下安装个虚拟机来运行IE6吗?这样即消耗系统资源,来回的切换也麻烦,关键是只为了一个测试哦,没必要这 ...

  2. JAVA中日期格式转换各个字母代表含义

    G  Era 标志符  Text  AD  y  年  Year  1996; 96  M  年中的月份  Month  July; Jul; 07  w  年中的周数  Number  27  W  ...

  3. 从github克隆内容到本地时权限问题

    从github克隆内容到本地时权限问题

  4. vim 粘贴复制操作

    原文链接:http://www.cnblogs.com/lansh/archive/2010/08/19/1803378.html vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握这三种模式十 ...

  5. Element-ui多选下拉实现全部与其他互斥

    1.以事件类型为例,给下拉绑定选项改变的change事件 2.当已选项个数大于1(即先选了其他,再选不限)且最后选的是不限时,取消其他选项选中状态: 当已选项个数等于2(即先选了不限,再选其他)且第一 ...

  6. 调试工具DEBUG的使用(8086)

    有关CPU和存储单元的概念在前一节我们已经了解,那么如何观察实际机器内部的情况呢?能不能看到具体的寄存器.标志.存储单元的内容呢?可不可以修改和控制它们呢? DEBUG这个有力工具,就可以深入到机器内 ...

  7. maven操作手册

    ===Maven的安装=== http://blog.csdn.net/yang5726685/article/details/56486479 ===Maven的jar包仓库地址配置=== http ...

  8. Mybatis- 配置

    主配置文件 properties 第一种 <properties> <property name="jdbc.driver" value="com.my ...

  9. python基础一 day17 作业

    # 3.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sbname=['alex','wupeiqi','yuanhao','nezha']# def func(item):# r ...

  10. Ubuntu 上配置静态的ip

    先关掉或卸掉 network-manager.然后,改动/etc/network/interfaces 如下:(由于是静态ip,你当然知道把例子中那些东西改成你自己的)auto lo eth0ifac ...