Redis数据类型及简单命令

本文详细介绍了Redis中的数据类型,包括String、Hash、List、Set和Zset的操作,如设置、获取、删除、修改以及各种高级功能,如计数、排序、集合运算等,展示了Redis在存储和管理数据方面的灵活性。
摘要由CSDN通过智能技术生成

Redis-Key

keys * #查看所有的key ttl name #查看当前key剩余秒数 type name #查看当前key为name的值类型 exists key #判断值是否存在 move name 1 #移动key为name到数据库1 expire name 10 #设置key为name的值10s后过期 append key1 "hello" #追加 strlen key1 # 查看key为key1的长度 flushdb #清空当前数据库, flushall #清空所有数据库

del key 适用于当key存在是删除key

String

set key1 v1 #设置值
get key1 #获得值
append key1 "hello" #追加,如果key不存在,相当于set key
127.0.0.1:6379> get s1
"1"
127.0.0.1:6379> APPEND s1 2
(integer) 2
127.0.0.1:6379> get s1
"12"
strlen key1 # 查看key为key1的长度
incr views # 自加1,string转换为integer并自增1
decr views # 自减1,string转换为integer并自减1
incrby views 10 # 自加10,步长为10,string转换为integer并自增10
decrby views 10 # 自减10,步长为10,string转换为integer并自减10
getrange key1 0 3 # 查看字符串范围 0到3(包括3)
getrange key1 0 -1 # 查看字符串全部范围
setrange key1 3 xxx # 替换指定位置3的字符串
127.0.0.1:6379> GETRANGE s1 0 -1
"134"
127.0.0.1:6379> SETRANGE s1 0 22
(integer) 3
127.0.0.1:6379> get s1
"224"
setex #(set with expire) 设置过期时间
setex key3 30 "hello"
setnx #(set if not exist)    不存在再设置
setnx mykey "redis"
mset k1 v1 k2 v2 k3 v3  # 批量设置值
mget k1 k2 k3     # 批量获取值
msetnx k1 v1 k4 v4 # 当不存在时批量设置值 msetnx是一个原子性的操作,要么一起成功,要么一起失败
对象
set user:1 {name:zhangsan,age:3}
批量设置对象
这里的key是一个巧妙的设计:user:{id}:{filed},如此设计可以极大的提升复用率
mset user:2:name lisi user:2:age 21
OK
mget user:2:name user:2:age
"lisi"
"21"
getset key1 redis #先获取,再设置,如果不存在返回nil,设置新值,如果存在,替换原来的值
127.0.0.1:6379> GETSET s1 5
"2"
127.0.0.1:6379> get s1
"5"

value除了是字符串还可以是数字

string类似的使用场景:

  • 计数器
  • 统计多单位的数量

Hash

map集合,key-map,这时候值是一个map集合,本质上和string类型没有太大区别,还是一个简单的key-vlaue,类型变成是hash,有序结合,后加入排后面

设置一个hash值
127.0.0.1:6379> HSET myhash field1 testhash
(integer) 1
127.0.0.1:6379> HGET myhash field1
"testhash"
设置多个hash值,当key重复时会覆盖原来的内容
目前hget和hmget的作用已经一样,都可同时设置多个filed,推荐使用hmget
127.0.0.1:6379> hmset myhash field1 hello field2 world
OK
127.0.0.1:6379> hmget myhash field1 field2
"hello"
"world"
删除指定字段内容
127.0.0.1:6379> hmset myhash1 test1 111 test2 222
OK
127.0.0.1:6379> get myhash1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> hmget myhash1 test1 test2
"111"
"222"
127.0.0.1:6379> hdel myhash1 test1
(integer) 1
127.0.0.1:6379> hmget myhash1 test1 test2
(nil)
"222"
获取所有hash字段
127.0.0.1:6379> hgetall myhash1
"test2"
"222"
获取hash内容长度
127.0.0.1:6379> hlen myhash1
(integer) 1
判断hash字段是否存在
127.0.0.1:6379> hexists myhash1 test2
(integer) 1
127.0.0.1:6379> hexists myhash1 test3
(integer) 0
获取所有hash key或者value
127.0.0.1:6379> hkeys myhash
"field1"
"field2"
127.0.0.1:6379> hvals myhash
"hello"
"world"
127.0.0.1:6379> hset myhash field3 5
(integer) 1
给hash某个字段指定增量
127.0.0.1:6379> hincrby myhash field3 1
(integer) 6
给hash某个字段指定减量
127.0.0.1:6379> hincrby myhash field3 -1
(integer) 5
判断hash某个字段是否存在,不存在则可以设置,存在则不可以设置(应用分布式锁)
127.0.0.1:6379> hsetnx myhash field4 hello
(integer) 1
127.0.0.1:6379> hsetnx myhash field4 world
(integer) 0

hash更适合对象的存储

List

有序,可重复

127.0.0.1:6379> LPUSH list1 one
(integer) 1
127.0.0.1:6379> LPUSH list1 two
(integer) 2
127.0.0.1:6379> LPUSH list1 three
(integer) 3
127.0.0.1:6379> LRANGE list1 0 -1
"three"
"two"
"one"
127.0.0.1:6379> LRANGE list1 0 1
"three"
"two"
127.0.0.1:6379> RPUSH list2 one
(integer) 1
127.0.0.1:6379> RPUSH list2 two
(integer) 2
127.0.0.1:6379> RPUSH list2 three
(integer) 3
127.0.0.1:6379> LRANGE list2 0 -1
"one"
"two"
"three"
127.0.0.1:6379> LRANGE list2 0 1
"one"
"two"

#lpop 默认弹出左边第一个元素,rpop默认弹出右边第一个元素
127.0.0.1:6379> LRANGE list1 0 -1
"three"
"two"
"one"
127.0.0.1:6379> LPOP list1
"three"
127.0.0.1:6379> RPOP list2
"three"

#lindex 通过下标获取值
127.0.0.1:6379> LINDEX list1 0
"two"

#llen 获取keylist的长度
127.0.0.1:6379> LLEN list1
(integer) 2

#LREM key count VALUE
#count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
#count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
#count = 0 : 移除表中所有与 VALUE 相等的值。
#精确移除list1中的一个值:one,精度匹配
127.0.0.1:6379> LREM list1 1 one
(integer) 1
127.0.0.1:6379> LRANGE list1 0 -1
"two"

#通过下标截取指定下标的list操作,截取后只剩下截取后的结果
#redis 127.0.0.1:6379> LTRIM KEY_NAME START STOP
127.0.0.1:6379> LRANGE list 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> LTRIM list 0 2
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "1"
2) "2"
3) "3"

#弹出一个值到另一个列表中
#lpoplpush mylist myotherlist # 移除列表的最后一个元素,将他移动到新的列表

#lset更新操作,目标元素要先存在,否则失败
#redis 127.0.0.1:6379> LSET KEY_NAME INDEX VALUE
127.0.0.1:6379> LSET list 0 4
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "2"
3) "3"

#linsert 列表插入操作
#linsert mylist before "world" "other"
127.0.0.1:6379> LRANGE list1 0 -1
"three"
"one"
"two"
127.0.0.1:6379> LINSERT list1 before one onebefore
(integer) 4
127.0.0.1:6379> LRANGE list1 0 -1
"three"
"onebefore"
"one"
"two"

可以有重复元素

基本的数据类型,列表

在redis中,可以设计成栈,队列,阻塞队列

所有的list命令都是l开头的,并且获取命令都是默认先进后出原则

set

无序,不可重复

 127.0.0.1:6379> SADD myset hello
(integer) 1
127.0.0.1:6379> SADD myset world
(integer) 1
127.0.0.1:6379> SMEMBERS myset #查看set 集合中添加的值
"world"
"hello"
127.0.0.1:6379> SISMEMBER myset hello # 判断set 集合中的值是否存在
(integer) 1
127.0.0.1:6379> SCARD myset # 查看集合中有多少元素
(integer)
127.0.0.1:6379> SREM myset hello # 移除指定的一个或多个集合元素
(integer) 1
127.0.0.1:6379> SMEMBERS myset
"world"
set无序不重复集合,抽随机
127.0.0.1:6379> SMEMBERS myset
"test3"
"test2"
"test4"
"world"
"test1"
127.0.0.1:6379> SRANDMEMBER myset # 随机抽取一个集合中的元素
"test4"
127.0.0.1:6379> SRANDMEMBER myset 1
"test4"
127.0.0.1:6379> SRANDMEMBER myset 2
"test2"
"test4"
随机删除指定的key并返回,区分srem
127.0.0.1:6379> SPOP myset
"test2"
127.0.0.1:6379> SMEMBERS myset
"test3"
"test4"
"world"
"test1"
127.0.0.1:6379> SPOP myset 2
"test1"
"test3"
将一个指定的值,移动到另一个set集合中
127.0.0.1:6379> SMEMBERS myset
"test5"
"test6"
"test4"
"world"
127.0.0.1:6379> SMOVE myset myset2 world
(integer) 1
127.0.0.1:6379> SMEMBERS myset2
"world"
"t1"
共同关注 (并集)
数字集合类:
差集
交集
并集
查看差集
127.0.0.1:6379> sadd skey1 a
(integer) 1
127.0.0.1:6379> sadd skey1 b
(integer) 1
127.0.0.1:6379> sadd skey1 v
(integer) 1
127.0.0.1:6379> sadd skey2 v
(integer) 1
127.0.0.1:6379> sadd skey2 c
(integer) 1
127.0.0.1:6379> sadd skey2 d
(integer) 1
127.0.0.1:6379> SDIFF skey1 skey2
"b"
"a"
查看交集
127.0.0.1:6379> SINTER skey1 skey2
"v"
查看并集
127.0.0.1:6379> SUNION skey1 skey2
"v"
"b"
"a"
"d"
"c"

微博,A用户将所有关注的人放在一个set集合中!将它的粉丝也放在一个集合中!共同关注,共同爱好,二度好友,推荐好友(六度分割理论)

zset

有序集合,不可重复,每个元素关联一个double类型分数score,通过此数据进行从小到大排序。该集成员是唯一的,但每个成员的分数可以一致。

在set的基础上,增加了一个值,对比:sadd myset hello,zadd myzset 1 hello

所有zset的命令都是以z开头的

设置一个有序集合一个值
127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two 3 three
(integer) 2
获取有序集合
127.0.0.1:6379> ZRANGE myzset 1 -1
"two"
"three"
127.0.0.1:6379> ZRANGE myzset 0 -1
"one"
"two"
"three"
127.0.0.1:6379>
排序
127.0.0.1:6379> zadd salary 2500 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 5000 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 500 xiaoming
(integer) 1
升序排序 从小到大
min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下
使用 ZRANGEBYSCORE 这类命令
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf
"xiaoming"
"xiaohong"
"zhangsan"
升序排序带参数
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores
"xiaoming"
"500"
"xiaohong"
"2500"
"zhangsan"
"5000"
从负无穷到2500进行排序并且附带参数
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 2500 withscores
"xiaoming"
"500"
"xiaohong"
"2500"
降序排序,从大到小
127.0.0.1:6379> ZREVRANGE salary 0 -1
"zhangsan"
"xiaohong"
127.0.0.1:6379> ZREVRANGE salary 0 -1 withscores
"zhangsan"
"5000"
"xiaohong"
"2500"
zrem移除元素
127.0.0.1:6379> ZRANGE salary 0 -1
"xiaoming"
"xiaohong"
"zhangsan"
127.0.0.1:6379> zrem salary xiaoming
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1
"xiaohong"
"zhangsan"
获取有序集合中的个数
127.0.0.1:6379> zcard salary
(integer) 2
Redis Zcount 命令用于计算有序集合中指定分数区间的成员数量。
127.0.0.1:6379> zrange salary 0 -1 withscores
1) "xiaohong"
2) "2500"
3) "zhangsan"
4) "5000"
127.0.0.1:6379> ZCOUNT salary 100 2600
(integer) 1

案例思路:set排序,存储班级成绩表,工资表排序

普通消息:1,重要消息:2 带权重进行判断

排行榜应用实现,取Ton N实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值