Redis之String

Redis 数据类型

  • string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。
  • hash(哈希):一个键值对集合,可以存储多个字段。
  • list(列表):一个简单的列表,可以存储一系列的字符串元素。
  • set(集合):一个无序集合,可以存储不重复的字符串元素。
  • zset(sorted set:有序集合): 类似于集合,但是每个元素都有一个分数(score)与之关联。
  • 位图(Bitmaps):基于字符串类型,可以对每个位进行操作。
  • 超日志(HyperLogLogs):用于基数统计,可以估算集合中的唯一元素数量。
  • 地理空间(Geospatial):用于存储地理位置信息。
  • 发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。
  • 流(Streams):用于消息队列和日志存储,支持消息的持久化和时间排序。
  • 模块(Modules):Redis 支持动态加载模块,可以扩展 Redis 的功能。

String(字符串)

  • string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
  • string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。
  • string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

常用命令

SET key value:设置键的值。
GET key:获取键的值。
INCR key:将键的值加 1。
DECR key:将键的值减 1。
APPEND key value:将值追加到键的值之后

案例

# redis-cli -p 6379
127.0.0.1:6379> set key1 v1                 #设置key的值
OK
127.0.0.1:6379> get key1                    #获取key的值
"v1"
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> append key1 "hello"         #追加字符串
(integer) 7
127.0.0.1:6379> get key1
"v1hello"

127.0.0.1:6379> strlen key1                 #获取当前字符串的长度
(integer) 7

127.0.0.1:6379> EXISTS key1                 #判断当前key是否存在
(integer) 1

127.0.0.1:6379> APPEND name xiaoli          #追加字符串,如果当前key不存在,相当于set
(integer) 6

  • 字符串自增减、步长
127.0.0.1:6379> SET views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> INCR views                  #自增1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> INCR views
(integer) 2
127.0.0.1:6379> DECR views                  #自减1
(integer) 1
127.0.0.1:6379> DECR views
(integer) 0
127.0.0.1:6379> get views
"0"

127.0.0.1:6379> INCRBY views 10             #自增步长10
(integer) 10
127.0.0.1:6379> INCRBY views 10
(integer) 20
127.0.0.1:6379> DECRBY views 6              #自减步长10
(integer) 14
  • 截取字符串
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> KEYS *
(empty array)
127.0.0.1:6379> set key1 helloxiaoming
OK
127.0.0.1:6379> get key1
"helloxiaoming"
127.0.0.1:6379> GETRANGE key1 0 3             #截取字符串【0,3】
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1            #获取全部字符串
"helloxiaoming" 
  • 替换字符串
127.0.0.1:6379> set key2 sdagasdg
OK
127.0.0.1:6379> get key2
"sdagasdg"
127.0.0.1:6379> SETRANGE key2 1 00            #替换指定位置开始的字符串
(integer) 8
127.0.0.1:6379> get key2
"s00gasdg"
  • setex&setnx

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


127.0.0.1:6379> SETEX key3 30 hello           #设置key3的值为hello,30s过期。
OK

127.0.0.1:6379> ttl key3
(integer) 19

127.0.0.1:6379> SETNX mykey redis             #设置mykey的值为redis,返回结果为1,设置成功    
(integer) 1
127.0.0.1:6379> keys *
1) "key1"
2) "mykey"
3) "key2"
127.0.0.1:6379> setnx mykey mysql             #设置mykey的值为mysql,返回结果为0,设置失败,因为已近存在
(integer) 0
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> get mykey
"redis"
  • 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)
  • 对象
127.0.0.1:6379> mset user:1 {name:zhangsan,age:100}      #设置一个user:1的对象,值为json字符来保存一个对象! user:{id}:{filed}
OK

127.0.0.1:6379> mset user:1:name zhangsan user:1:age 1   
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "user:1:age"
2) "1"
  • getset
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 mysql             #如果存在值,取旧值,设新值
"redis"
127.0.0.1:6379> get db
"mysql"
posted @ 2024-05-29 21:01  *一炁化三清*  阅读(5)  评论(0编辑  收藏  举报