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"