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.应用场景
- 缓存
- 抢购、秒杀任务
- 消息中间件
- 激活码过期相关
- 显示最新的项目列表
- 网址排行榜
- 计数
本文来自博客园,作者:猿大佛,转载请注明原文链接:https://www.cnblogs.com/hushaoz/p/15484122.html