3.1 string(字符串)
4.1. string(字符串)
- SET/SETEX/MSET/MSETNX
- GET/MGET
- GETSET
- INCR/DECR
- DEL
1. 设置键值
set 设置的数据没有额外操作时,是不会过期的。
set key value
设置键为name
值为yuan
的数据
set name yuan
set name rain # 一个变量可以设置多次
注意:redis中的所有数据操作,如果设置的键不存在则为添加,如果设置的键已经存在则修改。
设置一个键,当键不存在时才能设置成功,用于一个变量只能被设置一次的情况。
setnx key value
一般用于给数据加锁(分布式锁)
127.0.0.1:6379> setnx goods_1 101
(integer) 1
127.0.0.1:6379> setnx goods_1 102
(integer) 0 # 表示设置不成功
127.0.0.1:6379> del goods_1
(integer) 1
127.0.0.1:6379> setnx goods_1 102
(integer) 1
2. 设置键值的过期时间
redis中可以对一切的数据进行设置有效期。以秒为单位
setex key seconds value
设置键为goods_1
值为101
过期时间为10秒的数据
setex name goods_1 10
3. 关于设置保存数据的有效期
setex 添加保存数据到redis,同时设置有效期,格式:
setex key time value
4. 设置多个键值
mset key1 value1 key2 value2 ...
例3:设置键为a1
值为goland
、键为a2
值为java
、键为a3
值为c
mset a1 goland a2 java a3 c
5. 字符串拼接值
常见于大文件上传
append key value
向键为a1
中拼接值haha
set title "我的"
append title "redis"
append title "学习之路"
6. 根据键获取值
根据键获取值,如果不存在此键则返回nil
get key
获取键name
的值
get name
根据多个键获取多个值
mget key1 key2 ...
获取键a1、a2、a3
的值
mget a1 a2 a3
getset:设置key的新值,返回旧值
redis> GETSET db mongodb # 没有旧值,返回 nil
(nil)
redis> GET db
"mongodb"
redis> GETSET db redis # 返回旧值 mongodb
"mongodb"
redis> GET db
"redis"
7. 自增自减
web开发中的电商抢购、秒杀。游戏里面的投票、攻击计数。系统中计算当前在线人数、
set id 1
incr id # 相当于id+1
get id # 2
incr id # 相当于id+1
get id # 3
set goods_id_1 10
decr goods_id_1 # 相当于 id-1
get goods_id_1 # "9"
decr goods_id_1 # 相当于id-1
get goods_id_1 # 8
set age 22
incrby age 2 # 自增自减大于1的值时候用incrby
8. 获取字符串的长度
set name xiaoming
strlen name # 8
9. 比特流操作
————————
mykey 00000011
1字节=8比特 1kb = 1024字节 1mb = 1024kb 1gb = 1024mb
1个int8就是一个字节,一个中文:3个字节
SETBIT # SETBIT key offset value 按从左到右的偏移量设置一个bit数据的值
GETBIT # 获取一个bit数据的值
BITCOUNT # 统计字符串被设置为1的bit数.
BITPOS # 返回字符串里面第一个被设置为1或者0的bit位。
案例1:
SETBIT mykey 7 1
# 00000001
getbit mykey 7
# 00000001
SETBIT mykey 4 1
# 00001001
SETBIT mykey 15 1
# 0000100100000001
我们知道 'a' 的ASCII码是 97。转换为二进制是:01100001。offset的学名叫做“偏移” 。二进制中的每一位就是offset值啦,比如在这里 offset 0 等于 ‘0’ ,offset 1等于 '1' ,offset 2 等于 '1',offset 6 等于 '0' ,没错,offset是从左往右计数的,也就是从高位往低位。
我们通过SETBIT 命令将 andy中的 'a' 变成 'b' 应该怎么变呢?
也就是将 01100001 变成 01100010 (b的ASCII码是98),这个很简单啦,也就是将'a'中的offset 6从0变成1,将offset 7 从1变成0 。
案例2:签到系统
setbit user_1 6 1
setbit user_1 5 1
setbit user_1 4 0
setbit user_1 3 1
setbit user_1 2 0
setbit user_1 1 1
setbit user_1 0 1
BITCOUNT user_1 # 统计一周的打卡情况