2-Redis五大基本数据类型之String

前置条件

redis安装完成并启动

连接redis并清空所有数据

Redis-key

在redis中无论什么数据类型,在数据库中都是以key-value形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。

key常见操作

127.0.0.1:6379> FLUSHALL #清空所有数据
OK
127.0.0.1:6379> 
127.0.0.1:6379> keys * #确认清空
(empty array)
127.0.0.1:6379> set name itblue #设置一个key
OK
127.0.0.1:6379> keys * #查看key
1) "name"
127.0.0.1:6379> set age 10 #设置一个key 并赋值
OK
127.0.0.1:6379> keys * #查询key
1) "age"
2) "name"
127.0.0.1:6379>  EXISTS name #查询key是否存在
(integer) 1
127.0.0.1:6379> EXISTS name1
(integer) 0
127.0.0.1:6379>

设置key过期时间

127.0.0.1:6379> get name #查询key的值
"bluehaha"
127.0.0.1:6379> expire name 30 #设置key name 30秒过期时间
(integer) 1
127.0.0.1:6379> ttl name #查看当前key剩余时间
(integer) 21
127.0.0.1:6379> ttl name
(integer) 17
127.0.0.1:6379> ttl name
(integer) 15
127.0.0.1:6379> ttl name
(integer) 12
127.0.0.1:6379> ttl name
(integer) 10
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name #key name 已过期
(integer) -2
127.0.0.1:6379> get name #查询不到key name
(nil)
127.0.0.1:6379> 
127.0.0.1:6379> type age #查看key name的类型
string
127.0.0.1:6379> 
其它操作可以搜索 官方查看帮助文档补充

String类型

string基本操作

127.0.0.1:6379> set key1 v1 #设置一个key=key1  值=v1
OK
127.0.0.1:6379> get key1  #查看key1的值
"v1"
127.0.0.1:6379> exists key1  #查看key1是否存在
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> append key1 "hello world"  #追加key1的值
(integer) 13 #默认返回字符串长度
127.0.0.1:6379> get key1 #查看key1的值
"v1hello world" #内容追加成功
127.0.0.1:6379> append key3 "hellojoke"#如果追加的key不存在就创建
(integer) 9
127.0.0.1:6379> get key3 #之前不存在key3 append之后就存在了
"hellojoke"
127.0.0.1:6379> 
127.0.0.1:6379> strlen key1 #获取key1长度
(integer) 13
127.0.0.1:6379> 

String实现i++

127.0.0.1:6379> set views 0 #创建key=views 值=0
OK
127.0.0.1:6379> get views# 查询
"0"
127.0.0.1:6379> incr views #incr 对key=views的值+1操作
(integer) 1 #+1=1
127.0.0.1:6379> incr views 
(integer) 2 #1+1=2
127.0.0.1:6379> incr views 
(integer) 3 #2=1=3
127.0.0.1:6379> 

127.0.0.1:6379> get views #key=views 的值=3
"3"
127.0.0.1:6379> 
127.0.0.1:6379> get views
"3"
127.0.0.1:6379> incr views #相当于i++ 现在views=4
(integer) 4
127.0.0.1:6379> incr views #自增1 =5
(integer) 5
127.0.0.1:6379> incr views #自增+1=6
(integer) 6

# i--
127.0.0.1:6379> decr views # decr=自减 1
(integer) 5 #views=5
127.0.0.1:6379> decr views #再次自减
(integer) 4  #views=4
127.0.0.1:6379> decr views #再次自减
(integer) 3  #views=3
127.0.0.1:6379> 

#以上不论自增还是自减 默认都是1
#设置自增/自减的步长
127.0.0.1:6379> incrby viewer 10 #incrby 自增步长=10
(integer) 10
127.0.0.1:6379> incrby viewer 10 #自增=10 #views=20
(integer) 20
127.0.0.1:6379> incrby viewer 10#自增=10 #views=30
(integer) 30
127.0.0.1:6379> incrby views 10 #自增=10  views=15
(integer) 15
127.0.0.1:6379> decrby views 5# ecrby 自减步长=10
(integer) 10 #15变成10
127.0.0.1:6379> 

Sting 截取替换

#截取
127.0.0.1:6379> set key1 onetwohaha  #设置key=key1的值
OK 
127.0.0.1:6379> get key1 #查看key1的值
"onetwohaha"
127.0.0.1:6379>  getrange key1 0 3# getrange 截取key1 [0-3]的字符
"onet"
127.0.0.1:6379>  getrange key1 0 -1 #截取全部字符
"onetwohaha"

##替换
127.0.0.1:6379> set key3 abcdef #设置key3的值
OK
127.0.0.1:6379> get key3 #查看key3的值
"abcdef"
127.0.0.1:6379> setrange key3 1 ** #从第一个字符串开始  后面的2个字符串替换成*  也就是把 字符串位置 1 和2的替换成*
(integer) 6
127.0.0.1:6379> get key3
"a**def"
127.0.0.1:6379> 

String 批量设置

#setex(set with expire)  设置失效
#setnx(set if not exist)  设置如果不存在就创建  分布式锁中常使用
127.0.0.1:6379> setex key4 30 "hello world" #设置key4 失效时间30s
OK
127.0.0.1:6379> ttl key4
(integer) 24
127.0.0.1:6379> ttl key4 #key4的有效时间在减少
(integer) 21
127.0.0.1:6379> setnx key5 "redis" #如果不存在就创建 key5=redis
(integer) 1 #成功了返回1 
#说明key5确实不存在 并创建了key5=redis
127.0.0.1:6379> keys * #key4已经过期没有了
1) "key1"
2) "key3"
3) "key2"
4) "key5"
127.0.0.1:6379> ttl key4 #key4已经过期没有了
(integer) -2
127.0.0.1:6379> setnx key5 "redishaha" #如果不存在就创建置
(integer) 0 #设置失败了返回0 因为上面创建了key5=redis
127.0.0.1:6379> get key5 # 后面的没有创建成功  
#key5的值还是redis 所有setnx是没有则创建并赋值 
"redis"
127.0.0.1:6379>

#批量设置
#mset 同时设置多个key=value
#mget
127.0.0.1:6379> flushall #先清空
OK
127.0.0.1:6379> get keys #确认是空的
(nil)
127.0.0.1:6379> keys * #没有任何key
(empty array)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #同时设置多个值
OK
127.0.0.1:6379> keys * #创建的所有key
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3 #创建的所有value
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 #msetnx如果不存在批量创建 
#原子性操作 要么一起成功 要么一起失败
(integer) 0 #创建失败 因为k1是存在的 
127.0.0.1:6379> get key4 #所以key4也没有创建成功
(nil)
127.0.0.1:6379> 
#创建对象
set user:1 {name:zhangsan,age:3} #设置一个key=user:1对象 值为json字符来保存一个对象


#巧妙的设计了key
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2 #user:1:name作为key来使用 key的名字 见名知意
OK
127.0.0.1:6379> mget user:1:name user:1:age  #获取信息
1) "zhangsan"
2) "2"
127.0.0.1:6379> 

127.0.0.1:6379> keys *
1) "k3"
2) "user:1:age" #这个作为一个key存进去
3) "k1"
4) "k2"
5) "user:1:name"
127.0.0.1:6379> 

#getset  先get获取当前值在set设置新的值
127.0.0.1:6379> getset dba redis #如果不存在就返回nil  在设置新的值
(nil) #key=dba 默认值是null  所有返回这个
127.0.0.1:6379> get dba #再次查询 可以查询到set后的的结果
"redis"
127.0.0.1:6379> getset dba mango #如果存在先返回原来的值  在设置新的值  更新操作
"redis"  #原来的值
127.0.0.1:6379> getset dba mango #再次查询 set成功的值
"mango"
127.0.0.1:6379> 

String的应用场景

string除了是字符串 可以是数字 统计访问量等

计数器

粉丝数

统计多单位数量

对象缓存

本篇命令集锦

set key1 v1 #设置一个key1 值v1

exists key1 #查看key1是否存在

append key1 "hello world" #追加key1的值 不存在就创建

get key3 #查询key3的值

strlen key1 #获取字符串key1长度

incr views #自增views的值 默认步长为1

decr views #自减views的值 默认步长为1

incrby viewer 10 #自增viewer的值 设置步长为10

decrby views 5 #自减viewer的值 设置步长为5

getrange key1 0 3 #截取 key的[0-3]个字符的值

setrange key3 1 aa # 从第一个开始 后面2个字符替换成aa

setex key4 30 "hello world" #设置key4 失效时间30s

ttl key4 #查看key4当前有效时间

setnx key5 "redis" #如果不存在就创建 key5

mset k1 v1 k2 v2 k3 v3 #同时设置多个key-value

mget k1 k2 k3 #同时获取多个key的值

msetnx k1 v1 k4 v4 #如果不存在批量创建 原子性操作 要么一起成功 要么一起失败

setnx key5 "redis" #如果不存在就创建 key5

posted @ 2022-04-13 17:44  机猿巧合  阅读(36)  评论(0编辑  收藏  举报