Redis 笔记(四)-String 字符串类型详解
2021-08-06 本文已影响0人
yjtuuige
- 内存存储模型
- 常用操作命令:
redis
命令不区分大小写
命令 | 说明 |
---|---|
set | 设置一个key/value |
get | 根据key获得对应的value |
mset | 一次设置多个key value |
mget | 一次获得多个key的value |
getset | 获得原始key的值,同时设置新值 |
strlen | 获得对应key存储value的长度 |
append | 为对应key的value追加内容 |
getrange 索引0开始 | 截取value的内容 |
setex | 设置一个key存活的有效期(秒) |
psetex | 设置一个key存活的有效期(毫秒) |
setnx | 存在不做任何操作,不存在添加 |
msetnx原子操作(只要有一个存在不做任何操作) | 可以同时设置多个key,只要有一个存在都不保存 |
decr | 进行数值类型的-1操作 |
decrby | 根据提供的数据进行减法操作 |
Incr | 进行数值类型的+1操作 |
incrby | 根据提供的数据进行加法操作 |
Incrbyfloat | 根据提供的数据加入浮点数 |
127.0.0.1:6379> set key1 test # 设置值
OK
127.0.0.1:6379> get key1 # 获取值
"test"
127.0.0.1:6379> keys * # 获得所有的key
1) "key1"
127.0.0.1:6379> exists key1 # 判断某一个key是否存在
(integer) 1
127.0.0.1:6379> append key1 hello # 追加字符串,如果当前key不存在,就相当于setkey
(integer) 9
127.0.0.1:6379> get key1
"testhello"
127.0.0.1:6379> strlen key1 # 获取字符串的长度
(integer) 9
127.0.0.1:6379> append key1 ,world
(integer) 15
127.0.0.1:6379> strlen key1
(integer) 15
127.0.0.1:6379> get key1
"testhello,world"
# 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 # 可以设置步长,指定增量!
(integer) 9
127.0.0.1:6379> incrby views 10
(integer) 19
127.0.0.1:6379> decrby views 5
(integer) 14
# 字符串范围 range
127.0.0.1:6379> set key1 hello,world # 设置 key1 的值
OK
127.0.0.1:6379> get key1
"hello,world"
127.0.0.1:6379> getrange key1 0 5 # 截取字符串 [0,5]
"hello,"
127.0.0.1:6379> getrange key1 0 -1 # 获取全部的字符串 和 get key是一样的
"hello,world"
# 替换
127.0.0.1:6379> set key2 test
OK
127.0.0.1:6379> get key2
"test"
127.0.0.1:6379> setrange key2 1 nn # 替换指定位置开始的字符串
(integer) 4
127.0.0.1:6379> get key2
"tnnt"
# setex (set with expire) # 设置过期时间
# setnx (set if not exist) # 不存在时设置 (在分布式锁中会常常使用!)
127.0.0.1:6379> setex key1 30 hello # 设置 key1 的值为 hello,30秒后过期
OK
127.0.0.1:6379> ttl key1 # 查看 key1 剩余时间
(integer) 25
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> setnx mykey redis # 如果 mykey 不存在,创建mykey
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
127.0.0.1:6379> ttl key1 # 查看 key1 剩余时间,-2 表示过期
(integer) -2
127.0.0.1:6379> setnx mykey MongoDB # 如果mykey存在,创建失败
(integer) 0
127.0.0.1:6379> get mykey # 查看 mykey 值,还是之前的 redis
"redis"
- 批量操作
mset
、mget
# mset 批量设置值
# mget 批量获取值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k3"
3) "k1"
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)
- 对象操作:
set user:1 {name:zhangsan,age:3}
# 设置一个user:1 对象 值为 json字符来保存一个对象
# 这里的key是一个巧妙的设计: user:{id}:{filed} , 如此设计在Redis中是完全OK了
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 20
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "20"
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"
-
psetex key milliseconds value
和setex
命令相似,但它以毫秒为单位设置key
的生存时间, -
getset key value
如果不存在值,则返回nil
,如果存在值,获取原来的值,并设置新的值 -
数据结构是相同的!
-
String
类似的使用场景:value
除了是我们的字符串还可以是我们的数字!
1、计数器
2、统计多单位的数量# user:{id}:{filed} uid:123:follow 0
3、粉丝数
4、对象缓存存储