Redis数据库总结大全

1.Redis数据结构

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。redis存储的是key, value格式的数据,其中key都是字符串,value有5种不同的数据结构,分别如下:

  • 字符串类型string
  • 列表类型list(类似Java中ListlinkedList集合)
  • 集合类型set(类似Set集合)
  • 有序集合类型sortedset(类似排序Set集合)
  • 哈希类型hash (类似java中Map集合)

2. Redis常用命令

# select 数据库序号  -(数据库默认从0开始,默认支持16个数据库)

# flushall         – 清空所有数据库的所有数据

# flushdb          - 清空当前所在数据库的数据

# keys *           - 查询所有的键,后接着跟?表示匹配一个字符

# del key          - 删除键

# type key         - 获取键值的数据类型

# HELP 空格 tab键   - 查看命令

# set key value    - 存储键
# get key          - 获取值
# del key          - 删除键值

# hset key field value - 存储键、值(map)
# hget key field       - 获取属性对应值
# hgetall key          - 获取所有的属性和值
# hdel key field       - 删除相应属性及值




3. Redis五大数据类型

  • 字符串类型(String)

在这里插入图片描述

# SET key value                  - 设置键值
# GET key                        - 获取值

# MSET key1 value1 key2 value2   - 同时设置多个键值
# MGET key1 key2                 - 同时获取多个键值

# INCR key                       - 存储类型为整数,让其值递增,返回其递增后的值
# INCRBY key step(步长)    	    - 按照步长的定制增加

# DECR key                		 - 与INCR key 相反
# DECRBY key step(步长)  	  		- 与INCRBY key 相反

# APPEND key value         		 - 向尾部追加值,返回追加后字符串长度

# STRLEN key                     - 返回键值的长度,如果键不存在则返回0



-------------------------------------------------------------------
# PSETEX key milliseconds value	 - 设置键的值和到期时间(以毫秒为单位)
# SETRANGE key offset value	     - 在指定偏移处开始的键处覆盖字符串的一部分
# SETEX key seconds value	     - 使用键和到期时间来设置值
# SETBIT key offset value	     - 存储在键上的字符串值中设置或清除偏移处的位
# GETBIT key offset	             - 返回在键处存储的字符串值中偏移处的位值
# GETSET key value	             - 设置键的字符串值并返回其旧值
# GETRANGE key start end	     - 获取存储在键上的字符串的子字符串
  • 列表类型(List)
    在这里插入图片描述

    # LPUSH key value1 [value2]				 - 将一个或多个值插入到列表头部
    # LPUSHX key value                       - 将一个值插入到已存在的列表头部
    # RPUSH key value1 [value2]				 - 在列表中添加一个或多个值
    
    # LRANGE key start stop					 - 获取列表指定范围内的元素
    
    # LPOP key      						 - 移出并获取列表的第一个元素
    # LREM key count value					 - 移除列表元素
    # RPOP key							 	 - 移除并获取列表最后一个元素
    
    # LSET key index value					 - 通过索引设置列表元素的值
    
    # LINDEX key index                       - 通过索引获取列表中的元素
    
    # LLEN key                          	 - 获取列表长度
    
    # LTRIM key start stop					 - 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
    
    
    
    
    -------------------------------------------------------------------------------
    
    # RPOPLPUSH source destination			 - 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
    
    # RPUSHX key value						 - 为已存在的列表添加值
    
    # BLPOP key1 [key2 ] timeout             - 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 
    
    # BRPOP key1 [key2 ] timeout             - 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    
    # BRPOPLPUSH source destination timeout  - 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    
    # LINSERT key BEFORE|AFTER pivot value   - 在列表的元素前或者后插入元素
    
    
  • 无序集合类型(set)
    在这里插入图片描述

    # SADD key member1 [member2]        - 向集合添加一个或多个成员
    
    # SMEMBERS key                      - 返回集合中的所有成员
    
    # SCARD key							- 获取集合的成员数
    
    # SREM key member1 [member2]	    - 移除集合中一个或多个成员
    
    
    
    ------------------------------------------------------------------------
    # SDIFF key1 [key2] 				     - 返回给定所有集合的差集
    # SINTER key1 [key2]				     - 返回给定所有集合的交集
    # SDIFFSTORE destination key1 [key2]     - 返回给定所有集合的差集并存储在 destination 中
    # SINTERSTORE destination key1 [key2]    - 返回给定所有集合的交集并存储在 destination 中
    # SISMEMBER key member					 - 判断 member 元素是否是集合 key 的成员
    # SMOVE source destination member		 - 将 member 元素从 source 集合移动到 destination 集合
    # SPOP key								 - 移除并返回集合中的一个随机元素
    # SRANDMEMBER key [count]				 - 返回集合中一个或多个随机数
    # SUNION key1 [key2]					 - 返回所有给定集合的并集
    # SUNIONSTORE destination key1 [key2]    - 所有给定集合的并集存储在 destination 集合中
    # SSCAN key cursor [MATCH pattern] [COUNT count]   - 迭代集合中的元素(包括元素成员和元素分值)
    
  • 有序集合(Zset)

与无序Set类似,提供了score(分数)进行排序,根据自己填写的数字大小进行排序。

例:ZADD myset 1 "hello"
# zadd key score member                         - 向有序集合添加一个或多个成员,或者更新已存在成员的分数

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

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

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

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

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

# ZSCAN key cursor [MATCH pattern] [COUNT count] - 迭代有序集合中的元素(包括元素成员和元素分值
  • Hash数据结构
    在这里插入图片描述

    类似 Map<String,Map<String,String>>
    # HSET key field value               		  - 将哈希表 key 中的字段 field 的值设为 value 
    
    # HMSET key field1 value1 [field2 value2 ]    - 同时将多个 field-value (域-值)对设置到哈希表 key 中
    
    # HMGET key field1 [field2]					  - 获取所有给定字段的值
    
    # HGET key field							  - 获取存储在哈希表中指定字段的值
    # HGETALL key								  - 获取在哈希表中指定 key 的所有字段和值
    
    # HKEYS key									  - 获取所有哈希表中的字段
    # HLEN key									  - 获取哈希表中字段的数量
    # HVALS key           						  - 获取哈希表中所有值
    
    # HDEL key field2 [field2]					  - 删除一个或多个哈希表字段
    
    # HEXISTS key field							  - 查看哈希表 key 中,指定的字段是否存在
    
    # HINCRBY key field increment				  - 为哈希表 key 中的指定字段的整数值加上增量 increment
    
    # HINCRBYFLOAT key field increment			  - 为哈希表 key 中的指定字段的浮点数值加上增量 increment
    
    # HSETNX key field value					  - 只有在字段 field 不存在时,设置哈希表字段的值
    
    
    
    # HSCAN key cursor [MATCH pattern] [COUNT count]  - 迭代哈希表中的键值对
    
    
    

4. Redis生存时间设置

# EXPIRE key seconds        			- 设置生存时间
# TTL key								- TTL返回值:>0为剩余生存时间,单位秒 -1为永久存储  -2为数据已经被删除

# PERSIST key							- 清除生存时间

5.Redis持久化

Redis是内存数据库,内存特点就是断电即丢失数据,如服务器需要重启动时,这时我们便可以把数据持久化到硬盘。

redis持久化机制:

  • RDB: 默认方式,在一定的间隔时间内,监测key的变化情况,然后持久化数据。
  • AOF: 日志记录的方式,记录每一条命令的操作,在每一-次命令操作后,持久化数据,对性能消耗大,不推荐用此方法。

RDB持久化使用:

windows用户编辑redis.windos.conf配置文件,linux则编辑vim /etc/redis.conf文件,意思是在一定时间内key变化一定数量才持久化,具体根据需求更改,持久化后会在根目录生成xxx.rdb文件。

在这里插入图片描述

AOF持久化使用:

同样在配置文件中修改appendonly no为appendonly yes开启AOF,在配置文件中选择所需持久化策略

# 根据需要去掉其中之一注释即可
# appendfsync always  每一次操作都进行持久化
# appendfsync everysec  每隔一秒进行一次持久化
# appendfsync no      不持久化

在redis安装目录重启redis-server服务(命令:redis-server /etc/redis.conf),然后启动客户端reids-cli。

6. 事务处理

事务开始到执行会经历三个阶段:

  • 开始事务
  • 命令入队
  • 执行事务
# MULTI              - 开启事务,然后将多个命令入队到事务中

# EXEC				 - 触发事务, 执行所有事务块内的命令

# DISCARD			 - 取消事务,放弃执行事务块内的所有命令

# UNWATCH			 - 取消 WATCH 命令对所有 key 的监视

# WATCH key [key …]  - 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

事务

# MULTI              - 开启事务,然后将多个命令入队到事务中

# EXEC				 - 触发事务, 执行所有事务块内的命令

# DISCARD			 - 取消事务,放弃执行事务块内的所有命令

# UNWATCH			 - 取消 WATCH 命令对所有 key 的监视

# WATCH key [key …]  - 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

7.应用场景

  • 缓存
  • 抢购、秒杀任务
  • 消息中间件
  • 激活码过期相关
  • 显示最新的项目列表
  • 网址排行榜
  • 计数
posted @ 2020-08-20 12:41  猿大佛  阅读(16)  评论(0编辑  收藏  举报