• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Redis-String(字符串)

互联网 diligentman 2周前 (01-12) 9次浏览

String(字符串)

  • 前言
  • 概括
  • 1、append,strlen
  • 2、 incr ,decr ,incrby设置自增步长,decrby
  • 3、getrange截取字符串,SETRANGE将指定位置字符 替换为 指定字符串
  • 4、setex ,setnx
  • 5、mset mget 同时设置多个值,msetnx原子性操作
  • 6、用字符串 保存对象
  • 7、getset 先get然后在set

前言

提示:本文章是日常学习内容的总结,并非全部原创;仅供大家参考借鉴,并无其他商业用途。Bilibili搜索关注:狂神说
真正在公司中的实践:NoSQL + RDBMS 一起使用才是最强的,阿里巴巴的架构演进!
技术没有高低之分,就看你如何去使用!(提升内功,思维的提高!)
云计算的长征之路:阿里云的这群疯子

概括

String类似的使用场景:value除了是我们的字符串还可以是我们的数字!

使用场景:

  1. 计数器
  2. 统计多单位的数量
  3. 粉丝数
  4. 对象缓存存储!

1、append,strlen

127.0.0.1:6379> set key1 v1            # 设置值 
OK
127.0.0.1:6379> APPEND key1 "hello"    # 追加字符串,如果当前key不存在,就相当于setkey 
(integer) 7 
127.0.0.1:6379> get key1 "v1hello" 
127.0.0.1:6379> STRLEN key1            # 获取字符串的长度! 
(integer) 7 
127.0.0.1:6379> APPEND key1 ",kaungshen" 
(integer) 17 
127.0.0.1:6379> STRLEN key1 
(integer) 17 
127.0.0.1:6379> get key1 
"v1hello,kaungshen"

2、 incr ,decr ,incrby设置自增步长,decrby

# i++ 
# 步长 i+= 
127.0.0.1:6379> set views 0          # 初始浏览量为0 
OK
127.0.0.1:6379> get views 
"0" 
127.0.0.1:6379> incr views           # 自增1 浏览量变为1 
(integer) 1 
127.0.0.1:6379> incr views 
(integer) 2 
127.0.0.1:6379> get views 
"2" 
127.0.0.1:6379> decr views           # 自减1 浏览量-1 
(integer) 1 
127.0.0.1:6379> decr views 
(integer) 0 
127.0.0.1:6379> decr views 
(integer) -1 
127.0.0.1:6379> get views 
"-1" 
127.0.0.1:6379> INCRBY views 10      # 可以设置步长,指定增量!  增加增加 10
(integer) 9 
127.0.0.1:6379> INCRBY views 10 
(integer) 19 
127.0.0.1:6379> DECRBY views 5 
(integer) 14

3、getrange截取字符串,SETRANGE将指定位置字符 替换为 指定字符串

127.0.0.1:6379> set key1 "hello,kuangshen"   # 设置 key1 的值 
OK
127.0.0.1:6379> get key1 
"hello,kuangshen" 
127.0.0.1:6379> GETRANGE key1 0 3            # 截取字符串 [0,3] 
"hell" 
127.0.0.1:6379> GETRANGE key1 0 -1           # 获取全部的字符串 和 get key是一样的 "hello,kuangshen" 
# 替换! 
127.0.0.1:6379> set key2 abcdefg 
OK
127.0.0.1:6379> get key2 
"abcdefg" 
127.0.0.1:6379> SETRANGE key2 1 xx           # 替换指定位置开始的字符串! 
(integer) 7 
127.0.0.1:6379> get key2 
"axxdefg"

4、setex ,setnx

setex (set with expire)     # 设置过期时间
setnx (set if not exis  )     # 不存在在设置 (在分布式锁中会常常使用!)

127.0.0.1:6379> setex key3 30 "hello"      # 设置key3 的值为 hello,30秒后过期 
OK
127.0.0.1:6379> ttl key3 (integer) 26 
127.0.0.1:6379> get key3 
"hello" 
127.0.0.1:6379> setnx mykey "redis"        # 如果mykey 不存在,创建mykey 
(integer) 1 
127.0.0.1:6379> keys * 
1) "key2" 
2) "mykey" 
3) "key1" 
127.0.0.1:6379> ttl key3 
(integer) -2 
127.0.0.1:6379> setnx mykey "MongoDB"      # 如果mykey存在,创建失败! 
(integer) 0 
127.0.0.1:6379> get mykey 
"redis"

5、mset mget 同时设置多个值,msetnx原子性操作

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3     # 同时设置多个值 
OK
127.0.0.1:6379> keys * 
1) "k1" 
2) "k2" 
3) "k3" 
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)

6、用字符串 保存对象

#Json方式
set user:1 {name:zhangsan,age:3}           # 设置一个user:1 对象 值为 json字符来保存一个对象! 

#key方式
# 这里的key是一个巧妙的设计: user:{id}:{filed} , 如此设计在Redis中是完全OK了! 
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2 
OK
127.0.0.1:6379> mget user:1:name user:1:age 
1) "zhangsan" 
2) "2" 

7、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"


喜欢 (0)