1. 简介
Redis数据就是以key-value形式来存储的,key只能是字符串类型,value可以是以下五种类型:String、List、 Set、SortedSets、Hash
2. String类型
2.1 简介
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
2.2 操作
- set/get/append/strlen
$ redis-cli
127.0.0.1:6379> select 0 #切换到第1个数据库,默认共有16个数据库,索引从0开始
OK
127.0.0.1:6379> keys * #显示所有的键key
(empty list or set)
127.0.0.1:6379> set name tom #设置键
OK
127.0.0.1:6379> get name #获取键对应的值
"tom"
127.0.0.1:6379> exists mykey #判断该键是否存在,存在返回1,不存在返回
0
(integer) 0
127.0.0.1:6379> append mykey "hello" #如果该键不存在,则创建,返回当前value的长度
(integer) 5
127.0.0.1:6379> append mykey " world" #如果该键已经存在,则追加,返回追加后 value的长度
(integer) 11
127.0.0.1:6379> get mykey #获取mykey的值
"hello world"
127.0.0.1:6379> strlen mykey #获取mykey的长度
(integer) 11
#EX和PX表示失效时间,单位为秒和毫秒,两者不能同时使用;NX表示数据库中不存在时才能设置,XX表示存在时才能设置
127.0.0.1:6379> set mykey "this is test" EX 5 NX
OK
127.0.0.1:6379> get mykey
"this is test"
注:命令不区分大小写,但key和value区分
- incr/decr/incrby/decrby
127.0.0.1:6379> flushdb #清空数据库
OK
127.0.0.1:6379> set mykey 20
OK
127.0.0.1:6379> incr mykey #递增1
(integer) 21
127.0.0.1:6379> decr mykey #递减1
(integer) 20
127.0.0.1:6379> del mykey #删除该键
(integer) 1
127.0.0.1:6379> decr mykey
(integer) -1
127.0.0.1:6379> del mykey
(integer) 1
127.0.0.1:6379> INCR mykey
(integer) 1
127.0.0.1:6379> set mykey 'hello' #将该键的Value设置为不能转换为整型的普通字符串
OK
127.0.0.1:6379> incr mykey #在该键上再次执行递增操作时,Redis将报告错误信息
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set mykey 10
OK
127.0.0.1:6379> incrby mykey 5 #递增5,即步长
(integer) 15
127.0.0.1:6379> decrby mykey 10 #递减10
(integer) 5
- getset/setex/setnx
# getset 获取的同时并设置新的值
127.0.0.1:6379> incr mycount #将计数器的值原子性的递增1
(integer) 1
127.0.0.1:6379> getset mycount 666 #在获取计数器原有值的同时,并将其设置为新值
"1"
127.0.0.1:6379> get mycount
"666"
# setex 设置过期时间
127.0.0.1:6379> setex mykey 10 "hello" #设置指定Key的过期时间为10秒,等同于set mykey hello ex 10
OK
127.0.0.1:6379> ttl mykey #查看指定Key的过期时间(秒数)
(integer) 8
# setnx 当key不存在时才能设置
127.0.0.1:6379> del mykey
(integer) 0
127.0.0.1:6379> setnx mykey "aaa" #key不存在,可以设置,等同于set mykey aaa nx
(integer) 1
127.0.0.1:6379> setnx mykey "bbb" #key存在,不能设置
(integer) 0
127.0.0.1:6379> get mykey
"aaa"
- setrange/getrange 设置/获取指定索引位置的字符
127.0.0.1:6379> set mykey "hello world"
OK
127.0.0.1:6379> get mykey
"hello world"
127.0.0.1:6379> setrange mykey 6 dd #从索引为6的位置开始替换(索引从0开始)
(integer) 11
127.0.0.1:6379> get mykey
"hello ddrld"
127.0.0.1:6379> setrange mykey 20 dd #超过的长度使用0代替
(integer) 22
127.0.0.1:6379> get mykey
"hello ddrld\x00\x00\x00\x00\x00\x00\x00\x00\x00dd"
127.0.0.1:6379> getrange mykey 3 12 #获取索引为[3,12]之间的内容
"lo ddrld\x00\x00"
- setbit/getbit 设置/获取指定位的BIT值,应用场景:考勤打卡
127.0.0.1:6379> del mykey
(integer) 1
127.0.0.1:6379> setbit mykey 7 1 #设置从0开始计算的第七位BIT值为1,返回原有BIT值0
(integer) 0
127.0.0.1:6379> get mykey #获取设置的结果,二进制的0000 0001的十六进制值为0x01
"\x01"
127.0.0.1:6379> setbit mykey 6 1 #设置从0开始计算的第六位BIT值为1,返回原有BIT值0
(integer) 0
127.0.0.1:6379> get mykey #获取设置的结果,二进制的0000 0011的十六进制值为0x03
"\x03"
127.0.0.1:6379> getbit mykey 6 #返回了指定Offset的BIT值
(integer) 1
127.0.0.1:6379> getbit mykey