1 简介
String 类型是 Redis 最基本的类型(与Memcache一样,其支持的操作与memcache的操作类似),一个 key 对应一个 value ,它的功能更丰富。设置可以存储二进制的,意思是 Redis 的 String 可以存储任何数据,比如 jpg 图片或者序列化的对象,一个键最大能存储 512 MB
2 应用场景
- 计数器
- 粉丝数
- 直播平台
- 浏览量统计
- 对象缓存存储
3 增
设置key,语法:set key value
127.0.0.1:6379> set name zls
OK
127.0.0.1:6379> set name swbo #第二次赋值会覆盖
OK
setnx(set if not exist) 不存在在设置(在分布式锁中常用)
127.0.0.1:6379> setnx mykey "redis" # 返回1, mykey不存在直接创建mykey
(integer) 1
127.0.0.1:6379> setnx mykey "mongoDB" # 返回0,如果mykey存在,创建失败
(integer) 0
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379>
setex (set with expire) 设置过期时间
# 给key3设置过期时间为10s,值为hello,若key已经存在,会覆盖新的值
127.0.0.1:6379> setex key3 10 hello
OK
127.0.0.1:6379> ttl key3
(integer) 8
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379>
设置多个key,语法:mset key value [key value…]
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 同时设置多个值
OK
127.0.0.1:6379> mget k1 k2 k3 # 同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 # msetnx 是一个原子性操作,要么一起成功,要么一起失败
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379>
getset(设置值、取值同时进行)
先get然后再set
127.0.0.1:6379> getset db redis # 如果不存在值,则返回 nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb # 如果存在值,获取原来的值,并设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"
127.0.0.1:6379>
设置值同时设置生存时间
127.0.0.1:6379> set name songwanbo ex 100
OK
#以秒查询key剩余生存时间
127.0.0.1:6379> ttl name
(integer) 88
对象
set user:1 {name:zhangshan,age:3} # 设置一个 user:1 对象,值为 json 字符串来保存一个对象
# 这里的key是一个巧妙的设计,user:{id}:{field} 如此设计在 Redis 中是完全ok的
127.0.0.1:6379> mset user:1:name songwanbo user:1:age 23
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "songwanbo"
2) "23"
127.0.0.1:6379>
数量递归增加
127.0.0.1:6379> incr fans #粉丝数加1
(integer) 1
#指定增加数值
127.0.0.1:6379> incrby fans 5 #粉丝数加5
(integer) 8
数量递减
127.0.0.1:6379> DECR fans #粉丝数减1
(integer) -1
#指定递减数
127.0.0.1:6379> DECRBY fans 5 #粉丝数减5
(integer) -3
浮点增加
127.0.0.1:6379> incrbyfloat fans 0.6
"0.6"
4 删
#删除已有key,语法:del key
127.0.0.1:6379> DEL fans
127.0.0.1:6379> select 0 #选择0号数据库进行键值存取
127.0.0.1:6379> set name1 zhangsan
127.0.0.1:6379> set name2 lisi
127.0.0.1:6379> set name3 wangsu
127.0.0.1:6379> del name1 name2 name3
5 改
127.0.0.1:6379[1]> set k1 v1 # 设置值
OK
127.0.0.1:6379[1]> get k1 # 获取值
"v1"
127.0.0.1:6379[1]> keys * # 获取所有的key
1) "k1"
127.0.0.1:6379[1]> EXISTS k1 # 判断某一个key是否存在
(integer) 1
127.0.0.1:6379[1]> APPEND k1 "hello" # 追加(若该键不存在,则创建,若存在则追加)
(integer) 7
127.0.0.1:6379[1]> get k1
"v1hello"
127.0.0.1:6379[1]>
修改第 N 个字符串
示例1
127.0.0.1:6379[1]> get k1
"v1hello"
127.0.0.1:6379[1]> setrange k1 2 H # 将第 2 个字符改为 H
(integer) 7
127.0.0.1:6379[1]> get k1 # 查看结果
"v1Hello"
127.0.0.1:6379[1]>
示例2
127.0.0.1:6379> set key2 "i love python"
OK
127.0.0.1:6379> get key2
"i love python"
127.0.0.1:6379>
127.0.0.1:6379> setrange key2 7 redis # 替换指定位置开始的字符串(注意源字符串长度)
(integer) 13
127.0.0.1:6379> get key2
"i love redisn"
127.0.0.1:6379>
6 查
获取key值,语法:get key
127.0.0.1:6379[1]> get k1
"v1Hello"
127.0.0.1:6379[1]>
查看string类型的长度
127.0.0.1:6379[1]> STRLEN k1
(integer) 7
127.0.0.1:6379[1]>
字符串范围 range,语法:getrange key start end
注:索引从0开始计算,取值包含start和end索引的字母
127.0.0.1:6379[1]> set key1 "hello,redis" # 设置 key1 的值
OK
127.0.0.1:6379[1]> get key1
"hello,redis"
127.0.0.1:6379[1]> getrange key1 6 10 #截取字符串下标为 [6,10],是一个闭区间
"redis"
127.0.0.1:6379[1]> getrange key1 0 -1 # 获取全部的字符串,和 get key 是一样的
"hello,redis"
127.0.0.1:6379[1]>
查看过期
- TTL key 和秒相关的过期时间查询
- PTTL key 和毫秒相关的过期时间查询
# 以秒查询key剩余生存时间
127.0.0.1:6379> ttl name
(integer) 8
# 以毫秒查询key剩余生存时间
127.0.0.1:6379> pttl name
(integer) 44016
获取多个key值,语法:mget key1 [key2…]
127.0.0.1:6379> mset name songwanbo age 20 gender m
OK
127.0.0.1:6379> mget name age gender
1) "songwanbo"
2) "20"
3) "m"
127.0.0.1:6379>
7 应用场景实现
- 粉丝数量增加,每点一次关注,都执行以下命令一次
127.0.0.1:6379[1]> set fans 0 # 初始粉丝量为0
OK
127.0.0.1:6379[1]> get fans
"0"
127.0.0.1:6379[1]> incr fans # 自增1,粉丝数变为1
(integer) 1
127.0.0.1:6379[1]> incr fans
(integer) 2
127.0.0.1:6379[1]> get fans
"2"
- 取消关注则执行以下命令一次
127.0.0.1:6379[1]> decr fans # 自减1,粉丝数减少1
(integer) 1
127.0.0.1:6379[1]> decr fans
(integer) 0
127.0.0.1:6379[1]> decr fans
(integer) -1
127.0.0.1:6379[1]> get fans
"-1"
127.0.0.1:6379[1]>
- 步长
# 刷粉丝
127.0.0.1:6379[1]> get fans
"-1"
127.0.0.1:6379[1]> incrby fans 10086 # 设置步长,指定增量
(integer) 10085
127.0.0.1:6379[1]> get fans
"10085"
# 减少粉丝
127.0.0.1:6379[1]> get fans
"10085"
127.0.0.1:6379[1]> DECRBY fans 5 # 指定步长,设置每次减少数量
(integer) 10080
127.0.0.1:6379[1]> DECRBY fans 5
(integer) 10075
127.0.0.1:6379[1]> get fans
"10075"
127.0.0.1:6379[1]>