Redis简介 什么是Redis?
Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库;
特点
- 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
- 不仅支持key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储。
- 支持数据的备份,即master-slave模式的数据备份;
链接:https://pan.baidu.com/s/1G8qQvf5zwy3SjoZDCaPCzw
提取码:dfuj
Window版本2.8
链接:https://pan.baidu.com/s/1EPB5PBhWebnC84Ml1YJ7uA
提取码:rcs7
避免中文乱码
redis-cli --raw
Redis keys 命令
命令 | 功能 |
---|---|
del key |
在key存在时删除key,删除成功返回1,否则返回0 |
dump key |
序列化给定key,并返回被序列化的值; |
exists key |
检查给定key是否存在,存在返回1,否则返回0 |
expire key seconds |
为给定key设置过期时间以秒计 |
expireat key timestamp |
同上,不过时间参数为unix时间戳 |
pexpire key milliseconds |
同上,以毫秒计 |
keys pattern |
查找所有给定模式的key |
move key db |
将当前数据库的key移动到给定数据库db当中 |
persist key |
移除key的过期时间 |
pttl key |
以毫秒为单位返回key的剩余的过期时间 |
ttl key |
同上,以秒为单位 |
randomkey |
从当前数据中随机返回一个key |
rename key newkey |
仅当newley不存在时。将key改名为newkey |
type key |
返回key所存储的值的类型 |
不同于Java中的String,而是类似与StringBuilder;
- 数据结构:SDS(simple dynamic string) 是可变的,在容量满了之后会自动扩容,在容量小于1m时,每次翻倍,超过1m 每次只增加1m,最多512m;
- set get
set key value存储value为字符串类型的数据;
get key根据key获取字符串类型的数据;
- mset mget
mset一次存储多个键值对;
mget 根据多个key 一次获取多个值;
- expire tll
expire 设置超时时间,超时之后自动失效;
tll 查看某个key剩余的超时时间;
- set [ex] [nx]
nx的含义是,不存在key时,set操作才会成功,如果有了key,set操作就会返回nil,而不会覆盖原有的key;
可以用于实现redis的分布式锁;
- getrange key start end 返回给定key中字符串的子字符;
- getset key value:当key存在时更新key的值,并返回旧值,不存在时创建key-value,返回nil;
- incr key针对value是数字时,每次自增1
- incrby key increment针对value是数字时,每次自增increment
- decr key减1;
- decr key increment :减increment;
- append key value:如果key存在并且是一个字符串,将指定的value追加到该key原来值的末尾;
数据结构:
- ziplist:当list中数据量很少的时候,数据连续存储,访问效率较高;
- quicklist:当list中数据量很多的时候,是一个双向的链表;
- rpush:往右侧添加元素;
- lpop:从左侧弹出元素;
- lpush :往左侧添加元素;
- rpop :从右侧弹出元素;
- lpush+rpop 行为上是一个队列(先入先出FIFO)
- rpush+lpop 同上
- lpush+lpop 行为上是一个栈 (先入后出)
- rpush+rpop 同上
- llen 查看集合的长度;
- ltrim
ltrim key start stop
:取定长子列表;
- lindex:按下标获取元素,效率较低,时间复杂度为O(n) 格式
lindex key index
- lrange 格式
lrange key start stop
-1表示到列表的最后;
数据结构:hash表(数组+链表)
- 渐进式扩容,扩容过程中会查询新旧两个hash表,不会影响客户的使用,等扩容结束会用旧的替换新的。
- 对比字符串:读取某一字段,存储消耗;
命令 | 描述 |
---|---|
hdel key field1 [field2] |
删除一个或多个哈希表字段 |
hexists key field |
查看哈希表key中,指定字段是否存在 |
hget key field | 获取指定字段的值 |
hgetall key |
获取指定key的所有字段和值 |
hincrby key |
为哈希表key中的指定字段的整数值加上增量inrement |
hincrbyefloat |
为哈希表key中的指定字段的浮点数值加上增量inrement |
hkeys key |
获取所有哈希表中的字段 |
hlen key |
获取哈希表中字段的数量 |
hmget key field1 [field2] |
获取所有给定字段的值 |
hmset key field1 value1 [field2 value2] |
同时将多个field-value对设置到哈希key中 |
hset key field value |
将哈希表key中的字段field的值设为value,而且不用判断字段先前是否存在 |
hsetnx key field value |
只有字段field不存在时设置哈希表字段的值 |
hvals key |
获取哈希表中所有的值 |
hscan key cursos |
迭代哈希表中的键值对 |
类似与java中的hashset,hash表(数组+链表)
- sadd:
sadd key 元素
添加元素; - smembers:
smembers key
查询所有元素; - sismenber:
sismenber key 待测试元素
判断某一个value是不是集合中的成员,包含返回1,不包含返回0; - scard: 获取set集合的大小;
- spop:在集合中随机找到一个元素,返回并删除;
- zadd
zadd key 得分 元素
注意默认得分低的排在前面; - zrange
zrange key start stop
查询集合 - zrevrange
arevrange key start stop
- zcard 查看大小;
- zscore
zscore key 元素
查看某个元素的得分 - zrank 查看排名
- zrangebyscore -inf 给一个分数范围;
- zrem 删除集合中的元素;
- 数据结构-跳跃表
- create if not exists 第一次操作时才创建这些集合;
- drop if no elements 如果集合空了,会把集合对应的内存释放掉;
- expire 过期时间
del 根据key 删除一个元素;
flushall 清空整个redis,删除所有的key;
遍历
keys 匹配关键字 根据匹配关键字,查找所有符合的key,keys * 千万不要在线上使用;
scan limit 代表每次只查询一部分符合匹配关键字的结果,不会像keys那样查询所有;
【Redis入门基本操作】redis相比关系型数据库
- 在关系型数据库中,当不同记录需要不同属性时,表的字段数量会越来越多以至于难以维护,而且当使用ORM将关系数据库中的对象实体映射成程序中的实体时,修改表的结构往往意味着要中断服务,一般需要创建额外的表;
- 而redis并不要求每个键都一句此结构存储,可以完全自由地为任何键增减字段而不影响其他键;
推荐阅读
- Redis|redis原理之布隆过滤器(Bloom Filter)
- redis安装与基本使用
- java|图解四种 IO 模型
- Redis|Redis性能解析--Redis为什么那么快()
- java|你跳一次涨多少(今天见识到跳槽天花板!!)
- java|送你一份大厂都这么解决Redis缓存问题,面试官必问!
- (免费领取红包封面)【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知
- redis优化(bigkey、hotkey)
- redis高可用(主从、哨兵、集群)
- 【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知