Redis常用数据类型及操作
2021/10/16 2:14:46
本文主要是介绍Redis常用数据类型及操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Redis常用数据类型及操作
常用数据类型
Reids中基础数据结构包含字符串、散列,列表,集合,有序集合。工作中具体使用哪种类型要结合具体场景。
String类型操作实践
字符串类型是redis中最简单的数据类型,它存储的值可以是字符串,其最大字符串长度支持到512M。基于此类型,可以实现博客的字数统计,将日志不断追加到指定key,实现一个分布式自增iid,实现一个博客的的点赞操作等
incr/incrby
当存储的字符串是整数时,redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。
语法:INCR key
127.0.0.1:6379> set num 1 OK 127.0.0.1:6379> get num "1" 127.0.0.1:6379> incr num (integer) 2 127.0.0.1:6379> get num "2"
说明,如果num不存在,则自动会创建,如果存在自动+1。
127.0.0.1:6379> incr num2 (integer) 1 127.0.0.1:6379> get num2 "1"
语法:INCRBY key increment
127.0.0.1:6379> set num3 6 OK 127.0.0.1:6379> get num3 "6" 127.0.0.1:6379> incrby num3 3 (integer) 9 127.0.0.1:6379> get num3 "9"
decr/decrby
减少指定的整数
DECR key 按照默认步长(默认为1)进行递减
DECRBY key decrement 按照指定步长进行递减
127.0.0.1:6379> get num3 "9" 127.0.0.1:6379> decr num3 (integer) 8 127.0.0.1:6379> get num3 "8" 127.0.0.1:6379> decrby num3 2 (integer) 6 127.0.0.1:6379> get num3 "6"
append
向尾部追加值。如果键不存在则创建该键,其值为写的value,即相当于SET key value。返回值是追加后字符串的总长度。
语法:APPEND key value
127.0.0.1:6379> set str qi OK 127.0.0.1:6379> get str "qi" 127.0.0.1:6379> APPEND str qi (integer) 4 127.0.0.1:6379> get str "qiqi"
strlen
字符串长度,返回数据的长度,如果键不存在则返回0。注意,如果键值为空串,返回也是0。
语法:STRLEN key
127.0.0.1:6379> get str "qiqi" 127.0.0.1:6379> STRLEN str (integer) 4
mset/mget
同时设置/获取多个键值
语法:MSET key value [key value …]
MGET key [key …]
127.0.0.1:6379> mset a 1 b 2 c 3 OK 127.0.0.1:6379> mget a b c 1) "1" 2) "2" 3) "3"
Hash类型应用实践
Redis散列类型相当于Java中的HashMap,实现原理跟HashMap一致,一般用于存储对象信息,存储了字段(field)和字段值的映射,一个散列类型可以包含最多2^32-1个字段。
hset/hget
语法结构
HSET key field value HGET key field HMSET key field value [field value…] HMGET key field [field] HGETALL key
HSET和HGET赋值和取值
127.0.0.1:6379> hset user username qi (integer) 1 127.0.0.1:6379> hget user username "qi" 127.0.0.1:6379> hset user username aqi (integer) 0 127.0.0.1:6379> hget user username "aqi" 127.0.0.1:6379> hset user age 22 (integer) 1 127.0.0.1:6379> hgetall user 1) "username" 2) "aqi" 3) "age" 4) "22"
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。
hincrby
127.0.0.1:6379> HINCRBY user age 2 (integer) 24 127.0.0.1:6379> hget user age "24"
hmset/hmget
HMSET和HMGET设置和获取对象属性
127.0.0.1:6379> hmset user name qi age 22 addr suzhou OK 127.0.0.1:6379> hmget user name age 1) "qi" 2) "22" 127.0.0.1:6379> HGETALL user 1) "name" 2) "qi" 3) "age" 4) "22" 5) "addr" 6) "suzhou"
注意:上面HMGET字段顺序可以自行定义
hexists
属性是否存在
127.0.0.1:6379> HEXISTS user name (integer) 1 127.0.0.1:6379> HEXISTS user sex (integer) 0
hdel
删除属性
127.0.0.1:6379> HGETALL user 1) "name" 2) "qi" 3) "age" 4) "22" 5) "addr" 6) "suzhou" 127.0.0.1:6379> HDEL user addr (integer) 1 127.0.0.1:6379> HGETALL user 1) "name" 2) "qi" 3) "age" 4) "22"
hkeys/hvals
只获取字段名HKEYS或字段值HVALS
127.0.0.1:6379> hkeys user 1) "name" 2) "age" 127.0.0.1:6379> HVALS user 1) "qi" 2) "22"
List类型应用实践
Redis的list类型相当于java中的LinkedList,其原理就就是一个双向链表。支持正向、反向查找和遍历等操作,插入删除速度比较快。经常用于实现热销榜,最新评论等的设计。
lpush
在key对应list的头部添加字符串元素
127.0.0.1:6379> LPUSH list qi (integer) 1 127.0.0.1:6379> LPUSH list a (integer) 2 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "qi"
其中,Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
rpush
在key对应list的尾部添加字符串元素
127.0.0.1:6379> RPUSH list qifei (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "qi" 3) "qifei"
del
127.0.0.1:6379> del list (integer) 1
linsert
在key对应list的特定位置之前或之后添加字符串元素
127.0.0.1:6379> LPUSH list qi a (integer) 2 127.0.0.1:6379> LINSERT list before qi xiaoqi (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "xiaoqi" 3) "qi" 127.0.0.1:6379> LINSERT list after qi lail (integer) 4 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "xiaoqi" 3) "qi" 4) "lail"
lset
设置list中指定下标的元素值(一般用于修改操作)
127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "xiaoqi" 3) "qi" 4) "lail" 127.0.0.1:6379> lset list 3 kuai OK 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "xiaoqi" 3) "qi" 4) "kuai"
lrem
从key对应list中删除count个和value相同的元素,count>0时,按从头到尾的顺序删除
127.0.0.1:6379> LPUSH list hello (integer) 1 127.0.0.1:6379> LPUSH list hello (integer) 2 127.0.0.1:6379> LPUSH list hello (integer) 3 127.0.0.1:6379> LPUSH list qiqi (integer) 4 127.0.0.1:6379> LPUSH list hello (integer) 5 127.0.0.1:6379> LPUSH list hello (integer) 6 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "hello" 3) "qiqi" 4) "hello" 5) "hello" 6) "hello" 127.0.0.1:6379> LREM list 3 hello (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "qiqi" 2) "hello" 3) "hello"
count<0时,按从尾到头的顺序删除
127.0.0.1:6379> LPUSH list hello (integer) 4 127.0.0.1:6379> LPUSH list hello (integer) 5 127.0.0.1:6379> LPUSH list hello (integer) 6 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "hello" 3) "hello" 4) "qiqi" 5) "hello" 6) "hello" 127.0.0.1:6379> lrem list -3 hello (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "hello" 3) "qiqi"
count=0时,删除全部
127.0.0.1:6379> lrem list 0 hello (integer) 2 127.0.0.1:6379> lrange list 0 -1 1) "qiqi"
ltrim
保留指定key 的值范围内的数据
127.0.0.1:6379> lpush list a b c d e f (integer) 6 127.0.0.1:6379> lrange list 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 127.0.0.1:6379> LTRIM list 2 -1 OK 127.0.0.1:6379> lrange list 0 -1 1) "d" 2) "c" 3) "b" 4) "a"
lpop
从list的头部删除元素,并返回删除元素
127.0.0.1:6379> LPOP list "d"
rpop
从list的尾部删除元素,并返回删除元素:
127.0.0.1:6379> RPOP list "a"
llen
返回key对应list的长度:
127.0.0.1:6379> LLEN list (integer) 2
lindex
返回名称为key的list中index位置的元素:
127.0.0.1:6379> LPUSH list a b c d e f g (integer) 7 127.0.0.1:6379> LINDEX list 4 "c" 127.0.0.1:6379> LINDEX list -1 "a"
rpoplpush
从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个list是空或者不存在返回nil:
127.0.0.1:6379> rpoplpush list2 list (nil) 127.0.0.1:6379> rpoplpush list list2 "a"
Set类型应用实践
Redis的Set类似Java中的HashSet,是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd
添加元素,重复元素添加失败,返回0
127.0.0.1:6379> sadd name qi (integer) 1 127.0.0.1:6379> sadd name fang (integer) 1 127.0.0.1:6379> sadd name qi (integer) 0
smembers
获取内容
127.0.0.1:6379> SMEMBERS name 1) "fang" 2) "qi"
spop
移除并返回集合中的一个随机元素
127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> sadd name a b c d e f g (integer) 7 127.0.0.1:6379> spop name "d" 127.0.0.1:6379> spop name "f"
scard
获取成员个数
127.0.0.1:6379> scard name (integer) 5
smove
移动一个元素到另外一个集合
127.0.0.1:6379> sadd set1 1 2 3 4 5 (integer) 5 127.0.0.1:6379> sadd set2 a b c d e (integer) 5 127.0.0.1:6379> smove set1 set2 3 (integer) 1 127.0.0.1:6379> SMEMBERS set1 1) "1" 2) "2" 3) "4" 4) "5" 127.0.0.1:6379> SMEMBERS set2 1) "d" 2) "b" 3) "c" 4) "e" 5) "a" 6) "3"
sunion
并集
127.0.0.1:6379> SUNION set1 set2 1) "1" 2) "e" 3) "b" 4) "d" 5) "4" 6) "2" 7) "5" 8) "c" 9) "a" 10) "3" 127.0.0.1:6379> SMEMBERS set2 1) "d" 2) "b" 3) "c" 4) "e" 5) "a" 6) "3"
Storted Set类型应用实践
有序的set,通过分数值来进行排序,分数值越大,越靠后
zadd
添加数据
127.0.0.1:6379> zadd top 100 a 300 b 120 c 180 d 150 e (integer) 5
zrange
获取数据
127.0.0.1:6379> zrange top 0 -1 1) "a" 2) "c" 3) "e" 4) "d" 5) "b"
zscore
获取数据分数
127.0.0.1:6379> zscore top a "100"
zincrby
增加数据分数
127.0.0.1:6379> zincrby top 5 a "105"
zrevrange
逆序获取数据
127.0.0.1:6379> ZREVRANGE top 0 -1 1) "b" 2) "d" 3) "e" 4) "c" 5) "a"
这篇关于Redis常用数据类型及操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27阿里云Redis学习入门指南
- 2024-12-27阿里云Redis入门详解:轻松搭建与管理
- 2024-12-27阿里云Redis学习:新手入门指南
- 2024-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程