Redis入门基本操作

Redis简介 什么是Redis?
Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库;
特点

  • 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
  • 不仅支持key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储。
  • 支持数据的备份,即master-slave模式的数据备份;
下载安装 Window版本3.2
链接: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所存储的值的类型
基础数据结构 String
不同于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原来值的末尾;
list
数据结构:
- 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表(数组+链表)
  • 渐进式扩容,扩容过程中会查询新旧两个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 迭代哈希表中的键值对
set
类似与java中的hashset,hash表(数组+链表)
  • sadd:sadd key 元素 添加元素;
  • smembers:smembers key 查询所有元素;
  • sismenber:sismenber key 待测试元素 判断某一个value是不是集合中的成员,包含返回1,不包含返回0;
  • scard: 获取set集合的大小;
  • spop:在集合中随机找到一个元素,返回并删除;
zset(保证唯一并有序)
  • 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并不要求每个键都一句此结构存储,可以完全自由地为任何键增减字段而不影响其他键;

    推荐阅读