redis学习(五)

redis学习(五)

五大数据类型

官网文档

image-20200723154920895

后面我们使用SpringBoot。Jedis,所有的方法,就是这些命令!

Redis-key

127.0.0.1:6666> keys * # 查看所有key
(empty array)
127.0.0.1:6666> set name cxy # 存入一个字符串类型
OK
127.0.0.1:6666> keys *
1) "name"
127.0.0.1:6666> set age 1
OK
127.0.0.1:6666> keys *
1) "age"
2) "name"
127.0.0.1:6666> exists name # 判断当前key是否存在
(integer) 1
127.0.0.1:6666> exists name1
(integer) 0
127.0.0.1:6666> move name 1 # 移除当前key
(integer) 1
127.0.0.1:6666> keys *
1) "age"
127.0.0.1:6666> set name cuixiaoyan
OK
127.0.0.1:6666> keys *
1) "age"
2) "name"
127.0.0.1:6666> get name
"cuixiaoyan"
127.0.0.1:6666> expire name 10 # 设置key过期时间
(integer) 1
127.0.0.1:6666> ttl name # 查看key的剩余时间
(integer) 6
127.0.0.1:6666> ttl name 
(integer) 5
127.0.0.1:6666> ttl name 
(integer) -2
127.0.0.1:6666> get name
(nil)
127.0.0.1:6666> type age # 通过key查看类型
string

string(字符串)

# 基本操作
127.0.0.1:6666> flushall # 清空redis
OK
127.0.0.1:6666> set key1 v1 
OK
127.0.0.1:6666> get key1
"v1"
127.0.0.1:6666> exists key1 # 判断key是否存在
(integer) 1
127.0.0.1:6666> append key1 "hello" # 追加字符串
(integer) 7
127.0.0.1:6666> get key1
"v1hello"
127.0.0.1:6666> strlen key1 # 通过key获取值的长度
(integer) 7
127.0.0.1:6666> append key1 "cxy"
(integer) 10
127.0.0.1:6666> strlen key1
(integer) 10
127.0.0.1:6666> get key1
"v1hellocxy"
# i++ 步长 i+=
127.0.0.1:6666> set views 0 # 初始化
OK
127.0.0.1:6666> get views
"0"
127.0.0.1:6666> incr views # incr 加一
(integer) 1
127.0.0.1:6666> incr views
(integer) 2
127.0.0.1:6666> decr views # decr 减一
(integer) 1
127.0.0.1:6666> decr views
(integer) 0
127.0.0.1:6666> incrby views 10 # incrby 加n
(integer) 10
127.0.0.1:6666> incrby views 10
(integer) 20
127.0.0.1:6666> decrby views 5 # decrby 减n
(integer) 15
# 字符串范围 range
127.0.0.1:6666> set key1 "hello,cuixiaoyan"
OK
127.0.0.1:6666> get key1
"hello,cuixiaoyan"
127.0.0.1:6666> getrange key1 0 3 # 截取字符串[0,3]
"hell"
127.0.0.1:6666> getrange key1 0 -1 # -1为全部,效果如同get key
"hello,cuixiaoyan"
127.0.0.1:6666> set key2 qqwsadascas
OK
127.0.0.1:6666> get key2
"qqwsadascas"
127.0.0.1:6666> setrange key2 1 xxx # 替换指定位置开始的字符串为 xxx
(integer) 11
127.0.0.1:6666> get key2
"qxxxadascas"
# 设置过期时间 setex(set with expire) 不存在时再进行设置(分布式锁中会使用到) setnx(set if not exist)
127.0.0.1:6666> setex key3 30 "hello" # 设置过期时间为30秒
OK
127.0.0.1:6666> ttl key3
(integer) 26
127.0.0.1:6666> ttl key3
(integer) 16
127.0.0.1:6666> setnx mykey "redis" # key不存在才会增加
(integer) 1
127.0.0.1:6666> keys *
1) "key2"
2) "views"
3) "mykey"
4) "key1"
127.0.0.1:6666> setnx mykey "MongoDB" # 替换失败
(integer) 0
127.0.0.1:6666> getrange mykey 0 -1 # 截取字符串,等同于get key
"redis"
127.0.0.1:6666> setnx mykey1 "MongoDB" # 新增成功
(integer) 1
127.0.0.1:6666> getrange mykey1 0 -1
"MongoDB"
# 设置多个值,mset,mget
127.0.0.1:6666> flushall #先清空
OK
127.0.0.1:6666> mset k1 v1 k2 v2 k3 v3 # 批量设置多个
OK
127.0.0.1:6666> keys *
1) "k3"
2) "k1"
3) "k2"
127.0.0.1:6666> mget k1 k2 k3 # 批量获取多个
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6666> msetnx k1 v1 k4 v4 #因为k1已经存在,不符合条件,原子性不满足,导致失败。
(integer) 0
127.0.0.1:6666> keys *
1) "k3"
2) "k1"
3) "k2"
# 设置一个对象,这里的key是一个巧妙的设计: user:{id}:{filed} , 如此设计在Redis中是完全可以的。
127.0.0.1:6666> mset user:1:name cxy user:1:age 2
OK
127.0.0.1:6666> mget user:1:name user:1:age
1) "cxy"
2) "2"
# getset 先get,再set。
127.0.0.1:6666> getset db redis # 第一次获取没有key,返回nil,将会赋值。
(nil)
127.0.0.1:6666> get db 
"redis"
127.0.0.1:6666> getset db mysql # 第二次有值之后,就会修改。
"redis"
127.0.0.1:6666> get db
"mysql"

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

  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存存储