Redis命令及其数据类型

一 Redis命令

Redis 命令用于在 redis 服务上执行操作。要在 redis 服务上执行命令需要一个 redis 客户端。 Redis 客户端在我们之前下载的的 redis 的安装包中。

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

常用命令key管理

keys  * : 返回满足的所有键 ,可以模糊匹配 比如 keys  abc* 代表 abc 开头的 key
exists key :是否存在指定的key,存在返回1,不存在返回0
expire key second:设置某个key的过期时间 时间为秒
del key:删除某个key
ttl key:查看剩余时间,当key不存在时,返回 -2;存在但没有设置剩余生存时间时,返回 -1,否则,以秒为单位,返回 key 的剩余生存时间。
persist key:取消过去时间
PEXPIRE key milliseconds 修改key 的过期时间为毫秒
select :  选择数据库  数据库为0-15(默认一共16个数据库) s
设计成多个数据库实际上是为了数据库安全和备份
move key dbindex : 将当前数据中的key转移到其他数据库
randomkey:随机返回一个key
rename key key2:重命名key
echo:打印命令
dbsize:查看数据库的key数量
info:查看数据库信息
config get * 实时传储收到的请求,返回相关的配置  
flushdb :清空当前数据库
flushall :清空所有数据库
  • DEL key
  • 该命令用于在 key 存在时删除 key。 
  • EXISTS key
  • 检查给定 key 是否存在。 
  • EXPIRE key seconds
  • 为给定 key 设置过期时间(以秒计)。 
  • PEXPIRE key milliseconds
  • 设置 key 的过期时间以毫秒计。
  • TTL key
  • 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live) 
  • PTTL key
  • 以毫秒为单位返回 key 的剩余的过期时间。
  • KEYS pattern
  • 查找所有符合给定模式( pattern)的 key 。 
    keys 通配符     获取所有与pattern匹配的key,返回所有与该匹配 
      通配符: 
             *  代表所有 
             ? 表示代表一个字符 
  • RENAME key newkey
  • 修改Key的名称
  • MOVE key db
  • 将当前数据库的 key 移动到给定的数据库 db 当中 
  • TYPE key
  • 返回 key 所储存的值的类型

应用场景

EXPIRE key seconds

1、限时的优惠活动信息 2、网站数据缓存(对于一些需要定时更新的数据,例如:积分排行榜) 3、手机验证码 4、限制网站访客访问频率(例如:1秒钟最多访问5次)

Key的命名建议

redis单个key允许存入512M大小

  • 1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;

  • 2.key也不要太短,太短的话,key的可读性会降低;

  • 3.在一个项目中,key最好使用统一的命名模式,例如user:123:password

  • 4.key名称区分大小写

二 Redis数据类型

String类型

简介

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

string 数据结构是简单的key-value类型,value其不仅是string,也可以是数字,是包含很多种类型的特殊类型,

string类型是二进制安全的。意思是redis的string可以包含任何数据。 比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等。

String命令

赋值语法:
  SET KEY_NAME   VALUE: (说明:多次设置name会覆盖) (Redis SET 命令用于设置给定 key 的值。如果 key 已经存储值, SET 就覆写旧值,且无视类型)
  
命令:
  SETNX key1 value:(not exist) 如果key1不存在,则设值 并返回1。如果key1存在,则不设值并返回0;(解决分布式锁 方案之一,只有在 key 不存在时设置 key 的值。Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值)
  
  SETEX key1 10 lx :(expired) 设置key1的值为lx,过期时间为10秒,10秒后key1清除(key也清除)
 
  SETRANGE string range value: 替换字符串
  
​
 
取值语法:
 GET KEY_NAME :Redis GET命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。
 GETRANGE key start end :用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)
​
GETBIT key offset :对 key 所储存的字符串值,获取指定偏移量上的位(bit)
​
GETSET语法:  GETSET  KEY_NAME  VALUE :Getset 命令用于设置指定 key 的值,并返回 key 的旧值,当 key 不存在时,返回 nil 
​
STRLEN key :返回 key 所储存的字符串值的长度
​
​
删值语法:
DEL KEY_Name :删除指定的KEY,如果存在,返回值数字类型。
​
批量写:MSET k1 v1 k2 v2 ... 一次性写入多个值
批量读:MGET k1 k2 k3
​
GETSET name value :一次性设值和读取(返回旧值,写上新值)
​
自增/自减:
INCR KEY_Name :Incr 命令将 key 中储存的数字值增1。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作 
 自增:INCRBY KEY_Name :增量值 Incrby 命令将 key 中储存的数字加上指定的增量值 
 自减:DECR KEY_NAME       或    DECYBY KEY_NAME 减值 :DECR 命令将 key 中储存的数字减1
 
 :(注意这些 key 对应的必须是数字类型字符串,否则会出错,)
​
字符串拼接:APPEND  KEY_NAME VALUE 
 :Append 命令用于为指定的 key 追加至未尾,如果不存在,为其赋值
​
字符串长度 :STRLEN key

应用场景

  • 1、String通常用于保存单个字符串或JSON字符串数据

  • 2、因String是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储

  • 3、计数器(常规key-value缓存应用。常规计数: 微博数, 粉丝数)

INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果。假如,在某种场景下有3个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。 不少网站都利用redis的这个特性来实现业务上的统计计数需求。

Hash类型

简介

Hash类型是String类型的field和value的映射表,或者说是一个String集合。hash特别适合用于存储对象,相比较而言,将一个对象类型存储在Hash类型要存储在String类型里占用更少的内存空间,并对整个对象的存取。
可以看成具有KEY和VALUE的MAP容器,该类型非常适合于存储值对象的信息, 
如:uname,upass,age等。该类型的数据仅占用很少的磁盘空间(相比于JSON)。
Redis 中每个 hash 可以存储 2的32次方  - 1 键值对(40多亿)

Hash命令

常用命令

赋值语法: 
 HSET KEY  FIELD VALUE    :为指定的KEY,设定FILD/VALUE  
 HMSET KEY FIELD VALUE [FIELD1,VALUE1]…… :同时将多个 field-value (域-值)对设置到哈希表 key 中。 
 
取值语法: 
  HGET KEY FIELD   :获取存储在HASH中的值,根据FIELD得到VALUE
  HMGET KEY field[field1]      :获取key所有给定字段的值 
  HGETALL KEY      :返回HASH表中所有的字段和值  
  HKEYS KEY  :获取所有哈希表中的字段
  HLEN KEY   :获取哈希表中字段的数量
​
删除语法: 
   HDEL KEY field1[field2]    :删除一个或多个HASH表字段 
​
其它语法:
HSETNX key field value :只有在字段 field 不存在时,设置哈希表字段的值
​
HINCRBY key field increment :为哈希表 key 中的指定字段的整数值加上增量 increment 。
​
HINCRBYFLOAT key field increment  :为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
​
HEXISTS key field  :查看哈希表 key 中,指定的字段是否存在
​

应用场景

Hash的应用场景:(存储一个对象数据) 1、 常用于存储一个对象 2、 为什么不用string存储一个对象?

    hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中。
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:
    第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。
    第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。

总结: Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

起个名字是真的南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值