2、Redis的数据类型-string

Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值。也就是说,你不必仅仅把字符串当作键所指向的值。下列这些数据类型都可作为值类型:

  • 二进制安全的字符串
  • Lists: 按插入顺序排序的字符串元素的集合。他们基本上就是链表(linked lists)
  • Sets: 不重复且无序的字符串元素的集合。
  • Sorted sets,类似Sets,但是每个字符串元素都关联到一个叫score浮动数值(floating number value)。里面的元素总是通过score进行着排序,所以不同的是,它是可以检索的一系列元素。(例如你可能会问:给我前面10个或者后面10个元素)。
  • Hashes,由field和关联的value组成的map。field和value都是字符串的。这和Ruby、Python的hashes很像。
  • Bit arrays (或者说 simply bitmaps): 通过特殊的命令,你可以将 String 值当作一系列 bits 处理:可以设置和清除单独的 bits,数出所有设为 1 的 bits 的数量,找到最前的被设为 1 或 0 的 bit,等等。
  • HyperLogLogs: 这是被用于估计一个 set 中元素数量的概率性的数据结构。别害怕,它比看起来的样子要简单。

这里先看string类型。

Redis Strings

这是最简单的Redis类型,如果只用这种类型,Redis就像一个可以持久化的memcached服务器,memcached的数据只保存在内存中,服务器重启后,数据就会丢失。下面介绍Redis的string组命令

1、value为字符串

 

操作命令演示如下:

127.0.0.1:6380[8]> set k1 "a"
OK
127.0.0.1:6380[8]> get k1
"a"
127.0.0.1:6380[8]> set k2 "b" ex 5 nx #ex表示k2的过期时间,一旦超时5秒,k2就会失效;nx表示当没有k2时,创建k2
OK
127.0.0.1:6380[8]> get k2  #5秒还没到,k2还没有失效
"b"
127.0.0.1:6380[8]> get k2  #5秒已到,k2失效,没有value值了
(nil)
127.0.0.1:6380[8]> set k1 "b" xx #xx表示更新,即k1已经存在,更新一个新值
OK
127.0.0.1:6380[8]> get k1
"b"
127.0.0.1:6380[8]> append k2 "abc" #前面k2已经失效不存在了,当k2不存在时,新建一个键值对
(integer) 3
127.0.0.1:6380[8]> get k2
"abc"
127.0.0.1:6380[8]> append k2 "ee" #k2已经存在,这里表示在已有的字符串末尾追加新的字符串
(integer) 5
127.0.0.1:6380[8]> get k2
"abcee"
127.0.0.1:6380[8]> set k3 "hello world" #设置一个k3
OK
127.0.0.1:6380[8]> setrange k3 6 "Redis" #用新的字符串覆盖第7位开始后的字符串
(integer) 11
127.0.0.1:6380[8]> get k3
"hello Redis"
127.0.0.1:6380[8]> strlen k3
(integer) 11
127.0.0.1:6380[8]> mset k4 "hello" k5 "java" #设置多个键值对,命令不会失败的,当key已经存在则覆盖,当不存在时则新建
OK
127.0.0.1:6380[8]> mget k4 k5 #查询多个key对应的value值
1) "hello"
2) "java"

2、value为数值

127.0.0.1:6380[8]> set k1 100 #先设置一个初始值
OK
127.0.0.1:6380[8]> incr k1  #对一个已经存在的key的value值加1
(integer) 101
127.0.0.1:6380[8]> incr k2  #对不存在的key的value值加1,当key不存在时,先设初值为0,再加1返回
(integer) 1
127.0.0.1:6380[8]> decr k1  #对一个已经存在的key的value值减1
(integer) 100
127.0.0.1:6380[8]> incr k2 
(integer) 2
127.0.0.1:6380[8]> decr k2
(integer) 1
127.0.0.1:6380[8]> decr k2
(integer) 0
127.0.0.1:6380[8]> decr k2 #对一个已经存在的key的value值减1,这个value值为0,减1后变成-1返回
(integer) -1
127.0.0.1:6380[8]> decr k3 #对一个不存在的key的value值减1,当key不存在时,先设初值为0,再减1返回
(integer) -1
127.0.0.1:6380[8]> set k4 200
OK
127.0.0.1:6380[8]> incrby k4 10 #对一个已经存在的key的value值加10
(integer) 210
127.0.0.1:6380[8]> decrby k4 10 #对一个已经存在的key的value值减10
(integer) 200
127.0.0.1:6380[8]> incrby k5 300 #对一个不存在的key的value值加300,先设初值为0,再加300返回
(integer) 300
127.0.0.1:6380[8]> incrbyfloat k6 0.8 #对一个不存在的key的value值加小数0.8返回
"0.8"
127.0.0.1:6380[8]> set k7 400
OK
127.0.0.1:6380[8]> incrbyfloat k7 0.5 #对一个已经存在的key的value值加小数0.5返回
"400.5"

3、value为位图、

127.0.0.1:6380[8]> setbit k1 1 1
(integer) 0
127.0.0.1:6380[8]> setbit k1 2 1 #设置后,k1的value二进制为 01100000
(integer) 0
127.0.0.1:6380[8]> getbit k1 0
(integer) 0
127.0.0.1:6380[8]> getbit k1 1
(integer) 1
127.0.0.1:6380[8]> getbit k1 2
(integer) 1
127.0.0.1:6380[8]> bitcount k1  #设置后,k1的value二进制为 01100000,可见有2个1
(integer) 2
127.0.0.1:6380[8]> bitpos k1 0
(integer) 0
127.0.0.1:6380[8]> bitpos k1 1
(integer) 1
127.0.0.1:6380[8]> setbit k2 3 1 #设置后,k2的value二进制为 00010000
(integer) 0
127.0.0.1:6380[8]> bitpos k2 1  #k2的value二进制为 00010000,第一个被设备为1的二进制位是3
(integer) 3
127.0.0.1:6380[8]> bitpos k2 1 0 1 #限制查找范围在0到1字节
(integer) 3
127.0.0.1:6380[8]> bitpos k2 1 1 2 #限制查找范围在1到2字节
(integer) -1
127.0.0.1:6380[8]> setbit k3 1 1
(integer) 0
127.0.0.1:6380[8]> setbit k3 2 1
(integer) 0
127.0.0.1:6380[8]> setbit k3 3 1 #设置后,k3的value二进制为 01110000
(integer) 0
127.0.0.1:6380[8]> setbit k4 3 1 #设置后,k4的value二进制为 00010000
(integer) 0
127.0.0.1:6380[8]> bitop and andkey k3 k4  #k3和k4二进制位取逻辑与,结果为00010000,其1个字节,返回值为字符串长度1
(integer) 1
127.0.0.1:6380[8]> bitcount andkey  #查看andkey 的value只有1个1
(integer) 1
127.0.0.1:6380[8]> bitop or orkey k3 k4  #k3和k4二进制位取逻辑或,结果为01110000,其1个字节,返回值为字符串长度1
(integer) 1
127.0.0.1:6380[8]> bitcount orkey  #查看orkey 的value有3个1
(integer) 3
127.0.0.1:6380[8]> bitop xor xorkey k3 k4  #k3和k4二进制位取逻辑异或,结果为01100000,其1个字节,返回值为字符串长度1
(integer) 1
127.0.0.1:6380[8]> bitcount xorkey  #查看xorkey  的value有2个1
(integer) 2
127.0.0.1:6380[8]> bitop not notkey k3  #k3二进制位取逻辑非,结果为10001111,其1个字节,返回值为字符串长度1
(integer) 1
127.0.0.1:6380[8]> bitcount notkey  #查看notkey 的value有5个1
(integer) 5

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值