【Redis】Redis的五大数据类型
文章目录
- 字符串(strings)
- 散列(hashes)
- 列表(lists)
- 集合(sets)
- 有序集合(sorted sets)
字符串(strings)
- 开启redis服务并连接
[root@localhost bin]# redis-server config/redis.conf
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> flushall # 情空数据库中的所有数据
OK
- 相关操作
(a)set
和get
值
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
(b)EXISTS key
查看当前key是否存在 :1存在,0不存在
127.0.0.1:6379> EXISTS key1
(integer) 1
( c)type key
查看key对应的类型
127.0.0.1:6379> type key1
string
(d)APPEND key value
追加一个value到key上,返回为key的长度
127.0.0.1:6379> APPEND key1 "hello"
(integer) 11
127.0.0.1:6379> get key1
"value1hello"
(e)keys *
查看所有的key
127.0.0.1:6379> keys *
1) "key1"
(f)STRLEN key
查看key的长度
127.0.0.1:6379> STRLEN key1
(integer) 11
(g)move key db
把key移到第db个数据库中
127.0.0.1:6379> move key1 1
(integer) 1
(h)EXPIRE key seconds
设置key的过期时间,单位秒。ttl key
查看key还有多就过期
127.0.0.1:6379> EXPIRE name 6
(integer) 1
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2
(i)incr key
:可以对应value++,decr key
:value - -,incrby views 10
和decrby views 5
是设置步长的加减
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> decr views
(integer) -1
127.0.0.1:6379> get views
"-1"
127.0.0.1:6379> incrby views 10
(integer) 9
127.0.0.1:6379> decrby views 5
(integer) 4
(j)字符串范围:getrang key i j
127.0.0.1:6379> set key1 hello,world
OK
127.0.0.1:6379> get key1
"hello,world"
127.0.0.1:6379> GETRANGE key1 0 3
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1
"hello,world"
127.0.0.1:6379>
(k)字符串替换:`SETRANGE key2 2 xxx
127.0.0.1:6379> set key2 abcdefgh
OK
127.0.0.1:6379> get key2
"abcdefgh"
127.0.0.1:6379> SETRANGE key2 2 xxx
(integer) 8
127.0.0.1:6379> get key2
"abxxxfgh"
(l)setex key3 30 "hello"
设置过期时间,SETNX key4 "world"
:不存在设置
127.0.0.1:6379> setex key3 30 "hello"
OK
127.0.0.1:6379> ttl key3
(integer) 23
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> SETNX key4 "world" # key4不存在,创建key4
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
2) "key4"
3) "key1"
127.0.0.1:6379> setnx key4 "hi" # key4存在,创建失败
(integer) 0
127.0.0.1:6379> get key4
"world"
(m)设置多个key-value:mset k1 v1 k2 v2 k3 v3
,取多个key的value:mget k1 k2 k3
27.0.0.1:6379> flushdb
OK
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k2 v4 k5 v5 # k2设置过了,失败,原子性操作,k5设置失败
(integer) 0
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379>
(n)设置对象
127.0.0.1:6379> set user:1 {name:zhangsan,age:3} # 设置user:1对象,json保存
OK
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 3
OK
127.0.0.1:6379> get user:1
"{name:zhangsan,age:3}"
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "3"
(o)getset
存在这个key,返回这个key的value,不存在返回null并创建
127.0.0.1:6379> getset k9 hi
(nil)
127.0.0.1:6379> get k9
"hi"
127.0.0.1:6379> getset k9 hello
"hi"
散列(hashes)
哈希,类似map集合,前面的是key-value,这里是key-Map。
hset
可以在一个hashes中设置多个key-value,hget
只可以获取一个散列中一个key的value,hmget
可以获取多个,hgetall
获得hash中所有的key-value
127.0.0.1:6379> hset myhash field1 hello
(integer) 1
127.0.0.1:6379> hget myhash field1
"hello"
127.0.0.1:6379> hset myhash field2 world field3 good
(integer) 2
127.0.0.1:6379> hmget myhash field1 field2
1) "hello"
2) "world"
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field2"
4) "world"
5) "field3"
6) "good"
- 删除hash中指定的key,对应value也就没有了
hdel
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field2"
4) "world"
5) "field3"
6) "good"
127.0.0.1:6379> hdel myhash field2
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field3"
4) "good"
127.0.0.1:6379>
- 查看hash中key-value的对数
hlen
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field3"
4) "good"
127.0.0.1:6379> hlen myhash
(integer) 2
- 判断hash中的key是否存在:
HEXISTS
存在返回1,不存在返回0
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field3"
4) "good"
127.0.0.1:6379> HEXISTS myhash field1
(integer) 1
127.0.0.1:6379> HEXISTS myhash field2
(integer) 0
127.0.0.1:6379>
- 获取所有的key
hkeys
,获取所有的valuehvals
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field3"
127.0.0.1:6379> hvals myhash
1) "hello"
2) "good"
- 加减操作
HINCRBY
127.0.0.1:6379> hset myhash field4 3
(integer) 1
127.0.0.1:6379> HINCRBY myhash field4 1 #加1
(integer) 4
127.0.0.1:6379> HINCRBY myhash field4 -2 #减2
(integer) 2
- key存在就不可以设置,不存在可以设置
hsetnx
返回0表示存在不能设置,1设置成功
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field3"
3) "field4"
127.0.0.1:6379> hsetnx myhash field3 hi
(integer) 0
127.0.0.1:6379> hsetnx myhash field2 hi
(integer) 1
列表(lists)
- List列表命令基本都是 l 开头的。
- 相关操作:
(a)lpush key value
:将一个值或多个值插到列表头部(左)RPUSH key value
:将一个值或多个值插到列表尾部(右)
LRANGE key 0 -1
获取列表中的值,
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1 # 获取具体范围的值
1) "three"
2) "two"
127.0.0.1:6379> RPUSH list right
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
(b)移除命令LPOP
和RPOP
:
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> LPOP list # 移除左边
"three"
127.0.0.1:6379> RPOP list # 移除右边
"right"
©获取下标的值:LINDEX key i
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379> lindex list 0
"two"
(d)获取长度llen key
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> llen list
(integer) 2
(e)移除指定个数的value,精确匹配lrem key i value
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
(f)截取指定的范围的valueltrim
127.0.0.1:6379> LPUSH list hello1 hello2 hello3 hello4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "hello4"
2) "hello3"
3) "hello2"
4) "hello1"
127.0.0.1:6379> ltrim list 1 2
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "hello3"
2) "hello2"
(g)将最后一个元素移到别的list上RPOPLPUSH mylist newlist
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello3"
2) "hello2"
3) "hello1"
127.0.0.1:6379> RPOPLPUSH mylist newlist
"hello1"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello3"
2) "hello2"
127.0.0.1:6379> LRANGE newlist 0 -1
1) "hello1"
(h)替换,更新操作lset key i newvalue
127.0.0.1:6379> EXISTS list #查看list是否存在
(integer) 0 #0不存在
127.0.0.1:6379> lset list 0 value1 #往一个不存在的list更新,报错
(error) ERR no such key
127.0.0.1:6379> lpush list hello
(integer) 1
127.0.0.1:6379> lpush list hello2
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "hello2"
2) "hello"
127.0.0.1:6379> lset list 0 item # 更新第0个
OK
127.0.0.1:6379> LRANGE list 0 -1 #查看
1) "item"
2) "hello"
127.0.0.1:6379> lset list 2 item # 更新下标不存在的,报错越界
(error) ERR index out of range
127.0.0.1:6379>
(i)插入操作:linsert key after|before value newvalue
在value后面或者前面插入一个newvalue
127.0.0.1:6379> LRANGE list 0 -1
1) "item"
2) "hello"
127.0.0.1:6379> LINSERT list after item good
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "item"
2) "good"
3) "hello"
127.0.0.1:6379> LINSERT list before hello great
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "item"
2) "good"
3) "great"
4) "hello"
127.0.0.1:6379>
集合(sets)
set中的值不能重复
saad key value
set集合中添加值,SMEMBERS key
查看所有值,SISMEMBER
查看value是否存在,scard key
获取set集合中的内容元素个数
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "good"
(integer) 1
127.0.0.1:6379> sadd myset "great"
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hello"
127.0.0.1:6379> SISMEMBER myset hi
(integer) 0
127.0.0.1:6379> SISMEMBER myset hello
(integer) 1
127.0.0.1:6379> scard myset
(integer) 3
- 移除某个值
srem key value
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hello"
127.0.0.1:6379> srem myset great
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "hello"
- set无序不重复,可以随机抽取值
127.0.0.1:6379> SRANDMEMBER myset 1 #随机抽取1个值
1) "good"
127.0.0.1:6379> SRANDMEMBER myset 1
1) "hello"
127.0.0.1:6379> SRANDMEMBER myset 2 #随机抽取2个值
1) "good"
2) "hello"
- 随机删除
SMEMBERS key
默认删除1个,也可以在后面指定删除的个数,随机
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hi"
4) "hello"
127.0.0.1:6379> spop myset
"great"
127.0.0.1:6379> spop myset
"hello"
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "hi"
- 将集合中指定的元素移动到另一个集合中
smove key1 key2 value
key1中的value移到key2
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hi"
4) "hello"
127.0.0.1:6379> SMEMBERS myset2
1) "world"
127.0.0.1:6379> smove myset myset2 hello
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hi"
127.0.0.1:6379> SMEMBERS myset2
1) "hello"
2) "world"
有序集合(sorted sets)
在set集合的基础上增加一个值。
- 增加操作
127.0.0.1:6379> zadd myset 1 one #增加1个值
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three #增加多个
(integer) 2
127.0.0.1:6379> zrange myset 0 -1 #查看全部
1) "one"
2) "two"
3) "three"
- 排序操作
127.0.0.1:6379> zadd salary 2000 halen
(integer) 1
127.0.0.1:6379> zadd salary 3000 lily
(integer) 1
127.0.0.1:6379> zadd salary 2500 xiaoming
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf #小到大排序,范围负无穷到正无穷
1) "halen"
2) "xiaoming"
3) "lily"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores #小到大排序带上数字,范围负无穷到正无穷
1) "halen"
2) "2000"
3) "xiaoming"
4) "2500"
5) "lily"
6) "3000"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 2500 withscores #小到大排序带上数字,范围负无穷到2500
1) "halen"
2) "2000"
3) "xiaoming"
4) "2500"
127.0.0.1:6379> ZREVRANGEBYSCORE salary +inf -inf withscores #大到小排序
1) "lily"
2) "3000"
3) "xiaoming"
4) "2500"
5) "halen"
6) "2000"
- 移除操作
127.0.0.1:6379> ZRANGE salary 0 -1
1) "halen"
2) "xiaoming"
3) "lily"
127.0.0.1:6379> zrem salary xiaoming
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1
1) "halen"
2) "lily"
- 获取集合中元素的有效个数
127.0.0.1:6379> ZRANGE salary 0 -1
1) "halen"
2) "lily"
127.0.0.1:6379> zcard salary
(integer) 2
- 获取指定区间的元素个数
127.0.0.1:6379> zadd myset 1 one 2 two 3 three 4 four
(integer) 4
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> zcount myset 1 3
(integer) 3
127.0.0.1:6379> zcount myset 2 3
(integer) 2
【Redis】Redis的五大数据类型相关推荐
- Redis入门(2):五大数据类型(key,string,list,set,sortset)将其实战,配置文件详解,发布与订阅
五大数据类型 redis常见数据类型操作命令:http://www.redis.cn/commands.html Redis键(key) 命令 描述 keys * 查看当前库所有key (匹配:key ...
- 【用户画像】Redis的常用五大数据类型和配置文件介绍
文章目录 一 常用五大数据类型简介 1 Redis键(key) 2 Redis字符串(String) 3 Redis列表(List) 4 Redis集合(Set) 5 Redis哈希(Hash) 6 ...
- NoSQL概述-Redis安装-常用五大数据类型-概述Bitmaps,HyperLogLog,Geospatial和redis.conf 基本解析
NoSQL 概述 NoSQL(NoSQL=Not Only SQL),意即"不仅仅是SQL",泛指 非关系型的数据库. NoSQL不依赖业务逻辑方式存储,而以简单的key-valu ...
- 【redis】Redis中常用的五大数据类型的介绍以及代码的实现
一.五大数据类型的介绍 String:字符串 二进制安全的,可以包含任何数据,包括jpg图片或者序列化对象 字符串value长度不能超过512MB Hash:哈希 类似java中Map,就是一个键值对 ...
- (一)Redis——五大数据类型及基础知识
一位爱好技术的橘右京的哥哥橘左京 Redis--五大数据类型及基础知识(一) Redis 1.Redis命令 1.1 常用String命令 1.2 常用List命令 1.3 常用Hash命令 1.4 ...
- NoSQL(1)之 Redis的五大数据类型使用方法的详细介绍
Redis的五大数据类型也称五大数据对象:了解过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject:这个对象系统包含了五大数据对 ...
- Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁
1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...
- redis之五大数据类型
redis之五大数据类型 redis redis的两种链接方式 简单链接 1234 import redisconn = redis.Redis(host='10.0.0.200',port=6379 ...
- redis的zset的底层实现_Redis(三)--- Redis的五大数据类型的底层实现
1.简介 Redis的五大数据类型也称五大数据对象:前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject:这个对象系统包 ...
- note.. redis五大数据类型
redis 五大数据类型使用 nosql介绍,由来 什么是nosql 阿里巴巴的架构 nosql 四大分类 redis入门 概述 redis 安装 (docker) 基础的知识 redis五大数据类型 ...
最新文章
- 野指针与内存泄漏那些事
- 感知机模拟或门的实现:权重和阈值的设置
- AngularJS表单验证
- 黄聪:如何用代码设置控制自己网站的网页在360浏览器打开时强制优先使用极速模式,而非兼容模式...
- 第二篇:阿里数据中台之OneData体系1
- 后台管理中心跳转问题解决
- 前端学习(1855)vue之电商管理系统电商系统之安装mysql出现VCRUNTIME140_1.dll
- Mysql数据库,项目需求需要数据还原的数据表结构构思方案
- 操作系统(李治军) L10用户级线程
- Strut2开发经验总结
- idea docker 一键部署实战
- web前端开发:JavaScript 基本语法,
- 第 14 章 程序员常用 10 种算法
- DVB vs. SVB+Shader Instancing
- 谷歌翻译退出,idea谷歌翻译无法使用(解决)
- 电脑插入头戴式耳机后声音依然外放
- MuseScore入门教程(一、下载,并新建乐谱)
- 7、【STM32】独立看门狗和窗口看门狗(IWDG、WWDG)实验
- 锐龙 3 7320U参数 r3 7320U性能怎么样 r37320U相当于什么水平
- 破解智慧零售密码 苏宁易购818引爆全民消费狂欢
热门文章
- 车辆仪表数显器E-mark认证流程是怎样的?
- 第44章 	MPU6050传感器—姿态检测—零死角玩转STM32-F429系列
- 五一培训 清北学堂 DAY3
- OB0201 obsidian dataview插件使用
- linux桌面支持hdpi,用于HiDPI显示器的最佳Linux桌面环境 | MOS86
- x265笔记_1_下载调试
- linux佳能打印机服务,linux桌面打印机配置指南
- .net学习笔记——学生信息管理系统(一、在SQL server中新建学生信息库)
- 19 | 三方协议怎么签?
- html百度天气查询api,百度提供天气预报查询接口API