String字符串类型

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 应用场景实现

  1. 粉丝数量增加,每点一次关注,都执行以下命令一次
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"
  1. 取消关注则执行以下命令一次
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]> 
  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]> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值