Redis-key的基本命令和Redis最常用的数据类型:String

Redis有5大数据类型:string,set,hash,list,zset。
三大特殊数据类型:bitmaps位图、hyperloglog基数统计 和 geospatial 地理空间

在这里插入图片描述
Redis是一个开源(BSD许可)的,基于内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件MQ。它支持多种类型的数据结构,如字符串( strings ),散列 ( hashes ),列表( lists ),集合( sets ),有序集合( sorted sets)与范围查询,bitmaps,hyperloglogs和地理空间 ( geospatial))索引半径查询。Redis内置了复制( replication ),LUA脚本( Luascripting ),LRU驱动事件( LRU eviction ),事务(transactions)和不同级别的磁盘持久化 ( persistence ),并通过Redis哨兵 ( Sentinel )和自动分区(Cluster )提供高可用性( high availability )。

我们现在讲解的所有命令大家一定要全部记住,后面我们使用SpringBoot、Jedis时,用代码去操作redis,使用的所有的方法就是这些命令!
单点登录:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

redis-Key的基本命令
  # 启动redis服务
[root@giao bin]# redis-server myRedisConfig/redis.conf 
[root@giao bin]# redis-cli -p 6379  # 启动客户端
127.0.0.1:6379> ping     # 测试连接
PONG
127.0.0.1:6379> flushAll  # 清空所有数据库
OK
127.0.0.1:6379> keys *  # 查看所有key
(empty array)
127.0.0.1:6379> set name UNO
OK
127.0.0.1:6379> get name
"UNO"
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> get age
"1"
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> exists name   # 查看这个key存在不存在
(integer) 1
127.0.0.1:6379> exists sex
(integer) 0
127.0.0.1:6379> del name   # 移除这个键“name”
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> expire name 10   # 设置这个key过期时间,10代表10秒钟
(integer) 1
127.0.0.1:6379> get name   # 此时还有
"UNO"
127.0.0.1:6379> ttl name   # 查看还有多久过期,下面的数字代表秒数
(integer) 5
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name   # 过一会就没了
(nil)
127.0.0.1:6379> type name   # 查看改keys对应值的类型
string

还有不会的命令,就去官网找,或者去百度
redis中文网

接下来进入正题:

String:字符串类型

90%的java程序员使用redis只会使用一个String类型!

127.0.0.1:6379> set key1 v1
OK
127.0.0.1:6379> get key1
"v1"
127.0.0.1:6379> append key1 hello  # 往一个key中追加字符串,如果没有这个key,就新建了一个key
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key1   # 展示这个字符串的长度,string length
(integer) 7

#############################################################
i++
步长
127.0.0.1:6379> set num 0    # 初始值为0
OK
127.0.0.1:6379> get num
"0"
127.0.0.1:6379> incr num   # 自增1,可用于浏览量,多一个人看,就让这个数值加1
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> decr num   # 自减1,又变回1了
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incrby num 10   # 这个数字是:可以设置步长,指定增量
(integer) 11
127.0.0.1:6379> incr num   # 指定只管用他自己那一次,这一次还是加1
(integer) 12
127.0.0.1:6379> get num
"12"
127.0.0.1:6379> decrby num 9   # 指定减少量
(integer) 3
#############################################################
# 范围获取(截取字符串)range,相当于java里的substring
127.0.0.1:6379> set str "hello,world hello,my love"
OK
127.0.0.1:6379> get str
"hello,world hello,my love"
127.0.0.1:6379> getrange str 0 5   # 获取范围 key 从第几个索引到第几个索引
"hello,"
127.0.0.1:6379> getrange str 0 -1    # 要获取全部,0到-1就行
"hello,world hello,my love"

# 范围设置(字符串替换)类似于java的replace
127.0.0.1:6379> set key2 abcde
OK
127.0.0.1:6379> get key2
"abcde"
127.0.0.1:6379> setrange key2 1 xx   #从第几个索引开始替换,替换的内容是什么
(integer) 5
127.0.0.1:6379> get key2
"axxde"
#############################################################
# setex (set with expire) 设置过期时间
# setnx (set if not exist) 如果不存在,则设置他这个key(在分布式锁中常常使用)

127.0.0.1:6379> setex key3 30 "ccccc"   # 设置30秒之后过期
OK
127.0.0.1:6379> ttl key3   # 查看过期时间
(integer) 26
127.0.0.1:6379> get key3
"ccccc"
127.0.0.1:6379> setnx mykey "bbbbb"   # 如果不存在,则设置这么一个key
(integer) 1   # 结果为1,说明设置成功
127.0.0.1:6379> get mykey
"bbbbb"
127.0.0.1:6379> setnx mykey "aaaaa"   # 由于mykey存在,则设置结果失败
(integer) 0   # 结果为0,说明设置失败
127.0.0.1:6379> get mykey   # 可以看到还是bbbbb
"bbbbb"
#############################################################
# mset: 批量设置key
# mget:批量获取key

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   
# 如果不存在则批量设置,但是此时这里的k1是存在的,
# 又因为这是一个原子性的操作,所以一起失败了,即使k4不存在,也无法设置
(integer) 0
127.0.0.1:6379> get k4
(nil)   # 没有这个key

#############################################################
# 对象  
# 设置一个user:1对象,值是json格式的字符串,来保存一个对象

127.0.0.1:6379> set user:1 {name:UNO,age:18}   #json内容用大括号括起来
OK
127.0.0.1:6379> get user:1
"{name:UNO,age:18}"
# 第二种方式,使用mset
   #设置对象的属性key和value,到后面去取就行了
127.0.0.1:6379> mset user:2:name zhangsan user:2:age 19
OK
127.0.0.1:6379> mget user:2:name user:2:age
1) "zhangsan"
2) "19"
#############################################################
# getset :先get再set

127.0.0.1:6379> getset db mysql   #如果不存在,则返回nil(空),并设置这个key
(nil)
127.0.0.1:6379> get db
"mysql"
127.0.0.1:6379> getset db oracle   # 先获取原来的值,再修改新值
"mysql"
127.0.0.1:6379> get db
"oracle"

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

计数器
统计多单位的数量
粉丝数:有人关注就incr,有人取关就decr
对象缓存存储!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值