Redis数据类型-String

来源:互联网 发布:安知玉如意百度云 编辑:程序博客网 时间:2024/06/04 17:41

Redis数据类型

Redis支持的数据类型:string,hash,list,set, zset(sorted set有序集合)

String 字符串

  • redis最基本的类型,你可以理解为与Memcached一模一样的模型,一个key 对应一个 value
  • 二进制安全,表示redis的string 可以包含任何数据,比如jpg图片或者序列化的对象
  • 一个键最大能存储512MB
命令 描述 set 存key - value get 根据key获取value nx 若key 已存在,则返回nil,不替换 xx 若key 已存在,则替换value,默认也是替换 mset 批量存 mget 批量取
  • set 与 get
127.0.0.1:6379> set name 'just'OK127.0.0.1:6379> get name"just"
  • nx 与 xx
127.0.0.1:6379> set name just2 nx(nil)127.0.0.1:6379> set name just2 xxOK127.0.0.1:6379> get name"just2"
  • mset 与 mget
127.0.0.1:6379> mset a 1 b 2 c 3OK127.0.0.1:6379> mget a b1) "1"2) "2"

redis处理字符串数据,若value是基本类型-Integer,则可以进行‘加、减’运算

命令 描述 incr value + 1 incrby value + n desr value - 1 desrby value - n
127.0.0.1:6379> incr counter(integer) 101127.0.0.1:6379> incr counter(integer) 102127.0.0.1:6379> get counter"102"127.0.0.1:6379> decr counter(integer) 101127.0.0.1:6379> decrby counter 55(integer) 46127.0.0.1:6379> incrby counter 22(integer) 68

而且,incr 这类操作是原子性的,当多个客户同时操作相同key counter时永远不会产生竞争条件(只有竞争条件的存在,才会发生资源竞争问题),因为redis不会让多台客户端对一个key同时执行修改操作

在之前的操作中,可以看到返回的数据往往都是最新的值,那么如果返回修改前value的值呢?

命令 描述 getset 替换 value值,返回旧值
127.0.0.1:6379> getset counter 55"68"

如果你想自增counter,来记录系统的访问量,然后希望每一小时收集一次,则可以使用getset;

其他比较有用的命名:

命令 描述 exists 判断key是否存在,存在返回1,不存在返回0 del 删除key, 删除成功返回1,不成功0 type 判断key的数据类型,不存在返回none

自行验证了~

Redis expires

Redis期望keys的存在是有时间的,即过一段时间后进行删除,我们可以为key设置‘存在时间’

  • 时间可以是秒也可以是毫秒
  • 然而,期望时间是 1 millisecond 为单位
  • 这个时间是存储在磁盘上的,不管服务是否启动,都会删除

有设置生存时间的,当然也有设置永久存在的命令 persist

命令 描述 expire 为某一key设置存在时间,当key已存在情况下 ex 在set key ex 添加key 中使用 persist 将某一key设置为永久存在 ttl 查看key剩余存在时间,秒;若key已经不存在返回-2;若永久存在返回-1 pttl 查看key剩余存在时间,毫秒;若key已经不存在返回-2;若永久存在返回-1
127.0.0.1:6379> set name aaaOK127.0.0.1:6379> expire name 10  ## 存在10s127.0.0.1:6379> ttl name(integer) 4127.0.0.1:6379> ttl name    ##已删除(integer) -2127.0.0.1:6379> get name(nil)127.0.0.1:6379> set name aaa ex 100OK127.0.0.1:6379> persist name  ## 永久存在(integer) 1127.0.0.1:6379> pttl name  ##返回-1(integer) -1127.0.0.1:6379> save  ## 保存到磁盘OK  127.0.0.1:6379> expire name 30  ##设置存在30s(integer) 1127.0.0.1:6379> get name     ##关闭服务,30后再连接Could not connect to Redis at 127.0.0.1:6379: Connection refusednot connected> get name     ## 可以看到关闭服务也会删除(nil)
0 0