redis 的数据类型和基础命令

目录

启动并登录

redis基础操作命令

redis的数据类型

String类型

散列类型(Hash)

列表类型(List)

集合类型(Set)

有序集合类型 (sorted set)




启动并登录

启动redis

./redis-server

指定配置文件启动

./redis-server /home/ysfdev/upredis-2.2.0-centos7-x86_64/redis.conf

连接redis

./redis-cli -h 172.21.51.111 -p 3301

登录后输入密码

auth 密码

redis基础操作命令

#设置key值为value
127.0.0.1:6379> set csn aa
OK


#查看key的value值
127.0.0.1:6379> get csn
"aa"

#删除key 
127.0.0.1:6379> del csn
(integer) 1


#设置key的有效期
127.0.0.1:6379> expire csn 200
(integer) 1


#查看key剩余有效期,key进行修改后,有效期不会重新开始
127.0.0.1:6379> ttl csn
(integer) 197

#查看key剩余有效期,若key不存在
127.0.0.1:6379> ttl csn2
(integer) -2

# 查看key有效期,若key永久有效
127.0.0.1:6379> ttl csn
(integer) -1

#判断key是否存在
127.0.0.1:6379> exists csn
(integer) 1
127.0.0.1:6379> exists csn3
(integer) 0

#查看所有key
127.0.0.1:6379> keys *
 1) "PREPAY_FRONT_TOKEN_KEY"
 2) "PREPAY_BACK_TOKEN_KEY"
 3) "bitmap:issued:0:3"

#测试与服务端是否连通
127.0.0.1:6379> ping
PONG


#查看key数量
127.0.0.1:6379> dbsize
(integer) 21


#返回关于 Redis 服务器的各种信息和统计数值
127.0.0.1:6379> info
# Server
redis_version:3.2.12


#清空当前数据库中的所有 key
127.0.0.1:6379> flushdb 

#清空整个 Redis 服务器的数据( 删除所有数据库的所有 key )
127.0.0.1:6379> flushall 

#请求服务器关闭与当前客户端的连接( 断开连接 )
127.0.0.1:6379> quit



注:redis存储中文时有时候展示为

"\xe4\xbd\xa0\xe5\x9c\xa8\xe5\x93\xaa\xe9\x87\x8c\xe5\xb9\xb2\xe4\xbb\x80\xe4\xb9\x88"
这种形式,这只是redis的展示问题,只需要连接客户端时./reids-cli  -- raw 即可正常展示

127.0.0.1:6379> set csn 你在哪里干什么
OK
127.0.0.1:6379> get csn
你在哪里干什么

redis的数据类型

redis的数据类型包含5种自有类型和一种自定义类型。

五种自有类型为:

String类型(string)、哈希类型(hash)、列表类型(List)、集合类型(set) 和顺序集合类型(zset)。

String类型

它是一个二进制安全的字符串,意味着它不仅能够存储字符串、还能存储图片、视频等多种类型, 最大长度支持512M。

string基础操作命令

#设置key1的值为hello
127.0.0.1:6379> set key1 hello 
OK

#获取key1的值
127.0.0.1:6379> get key1
"hello"

#将key1赋予新值hello1,并返回原有的值
127.0.0.1:6379> getset key1 hello1
"hello"
127.0.0.1:6379> get key1
"hello1"

#删除key1
127.0.0.1:6379> del key1
(integer) 1

string自增自减操作命令

#设置key2的值为0
127.0.0.1:6379> set key2 0
OK

#将key2的值进行自增
127.0.0.1:6379> incr key2
(integer) 1

#将key2的值自增指定数值5
127.0.0.1:6379> incrby key2 5
(integer) 6

#将key2的值进行自减
127.0.0.1:6379> decr key2
(integer) 5

#将key2的值进行自减指定数据2
127.0.0.1:6379> decrby key2 2
(integer) 3

其他命令

#设置key1的值为hello
127.0.0.1:6379> set key1 hello
OK

#在key1值的末尾追加what,并返回key1的长度
127.0.0.1:6379> append key1 what
(integer) 9

#获取key1的值
127.0.0.1:6379> get key1
"hellowhat"

#获取key1的长度
127.0.0.1:6379> strlen key1
(integer) 9

#给多个key设置value
127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3
OK

#返回多个key的value
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"

散列类型(Hash)

hash 叫散列类型。等价于Java 中的 HashMap。但是在 redis 中 hash 的 key 必须是 string 类型。不支持其他类型。这个特性非常适合存储对象。因为一个对象可以有很多属性,存储起来就是键值对形式的。在 Reids 中,每个 Hash 可以存储多达 4 亿个键值对。

hash操作命令

# 给good对象添加name属性值为apple
127.0.0.1:6379> hset good name apple
(integer) 1

# 给good对象添加colour 属性值为red
127.0.0.1:6379> hset good colour red
(integer) 1

#获取good对象name属性值
127.0.0.1:6379> hget good name
"apple"

#获取good对象所有属性和对应的值
127.0.0.1:6379> hgetall good
1) "name"
2) "apple"
3) "colour"
4) "red"

#批量给对象user添加属性
127.0.0.1:6379> hmset user name csn age 25
OK

#批量获取对象user的属性值
127.0.0.1:6379> hmget user name age
1) "csn"
2) "25"

#删除对象user指定属性name(删除一个属性)
127.0.0.1:6379> hdel user name
(integer) 1

#删除对象user指定属性name(删除多个属性)
127.0.0.1:6379> hdel user name age
(integer) 2

#判断对象user中name属性是否存在
127.0.0.1:6379> hexists user name
(integer) 0
127.0.0.1:6379> hexists user age
(integer) 1

#获取对象user所有的属性
127.0.0.1:6379> hkeys user
1) "age"

#获取对象user所有的属性对应的值
127.0.0.1:6379> hvals user
1) "25"

#获取对象user中的属性个数
127.0.0.1:6379> hlen user
(integer) 1

列表类型(List)

在 Redis 中的 List 类型,其内部使用的是双向链表实现的,所以它具有双向链表具有的相关特性。其常用操作就是向列表两端添加或删除元素。这使得 List 既可以当做栈(先进后出)来使用,也可以当做队列(先进先出)来使用。

list操作命令

#将1 2 3 4 插入list左端
127.0.0.1:6379> lpush list 1 2 3 4
(integer) 4

#将5 6 7 8 插入list右端
127.0.0.1:6379> rpush list 5 6 7 8
(integer) 8

#获取list的全部数据,0到-1 代表全部数据
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "5"
6) "6"
7) "7"
8) "8"

#获取list的下标1到下标2的数据,下标从0开始
127.0.0.1:6379> lrange list 1 2
1) "3"
2) "2"

#弹出list左边的一个值(弹出后list中将无该值)
127.0.0.1:6379> lpop list
"4"

#弹出list右边的一个值(弹出后list中将无该值)
127.0.0.1:6379> rpop list
"8"

127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
4) "5"
5) "6"
6) "7"

#查看list中的数量
127.0.0.1:6379> llen list
(integer) 6

集合类型(Set)

redis 中的 set 类型和 java 中的 HashSet 类似,其底层都是用HashMap 实现的,只不过所有的 value 都指向同一个对象。在 set 中,没有重复的元素。并且没有顺序。其常用的操作就是向集合中加入或删除一个元素、判断某个元素是否在集合中。另外 redis 还提供了多个集合之间的 交集、并集、差集的运算。

基础命令

# 给seta 添加元素
127.0.0.1:6379> sadd seta a b c d e f g
(integer) 7

#给seta 添加重复元素
127.0.0.1:6379> sadd seta a
(integer) 0

#删除seta中的指定元素
127.0.0.1:6379> srem seta a b c
(integer) 3

#查看seta中的所有元素
127.0.0.1:6379> smembers seta
1) "d"
2) "g"
3) "f"
4) "e"

#判断元素是否在seta中
127.0.0.1:6379> sismember seta a 
(integer) 0
127.0.0.1:6379> sismember seta d
(integer) 1

交集并集命令

求并集 a∪b

#给seta设置值
127.0.0.1:6379> sadd seta 1 2 3 4
(integer) 4

#给setb设置值
127.0.0.1:6379> sadd setb 3 4 5 6
(integer) 4

#求seta 和setb的并集
127.0.0.1:6379> sunion seta setb
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"

求交集 a∩b

#给seta设置值
127.0.0.1:6379> sadd seta 1 2 3 4
(integer) 4

#给setb设置值
127.0.0.1:6379> sadd setb 3 4 5 6
(integer) 4

#求seta 和setb的交集
127.0.0.1:6379> sinter seta setb
1) "3"
2) "4"

求差集 a-b

#给seta设置值
127.0.0.1:6379> sadd seta 1 2 3 4
(integer) 4

#给setb设置值
127.0.0.1:6379> sadd setb 3 4 5 6
(integer) 4

#求seta和setb的差集,在seta中存在,在setb中不存在
127.0.0.1:6379> sdiff seta setb
1) "1"
2) "2"

#求seta和setb的差集,在setb中存在,在seta中不存在
127.0.0.1:6379> sdiff setb seta
1) "5"
2) "6"



有序集合类型 (sorted set)

SortedSet(zset)是 redis 提供的一个非常特别的数据结构,它在集合的基础上为每一个元素都关联了一个分数,这相当于 java 中的 Map<String,Double>,可以给每一个元素赋予一个score权重。另一方面又像TreeSet,内部的元素会按照权重score进行排序。

#给zseta添加元素,分数放前面,元素放后面
127.0.0.1:6379> zadd zseta 10 guan 20 rui 100 csn
(integer) 3

#获取zseta中元素csn的分数
127.0.0.1:6379> zscore zseta csn
"100"

#使用 zrange 获取指定区间(0 -1 表示全部)上的降序排名,带上分数
127.0.0.1:6379> zrange zseta 0 -1 withscores
1) "guan"
2) "10"
3) "rui"
4) "20"
5) "csn"
6) "100"

#使用 zrange 获取指定区间(0 -1 表示全部)上的升序排名,带上分数
127.0.0.1:6379> zrevrange zseta 0 -1 withscores
1) "csn"
2) "100"
3) "rui"
4) "20"
5) "guan"
6) "10"

#使用 zrange 获取指定区间(0 -1 表示全部)上的降序排名
127.0.0.1:6379> zrange zseta 0 -1
1) "guan"
2) "rui"
3) "csn"

# 使用 zrangebyscore 获取 负无穷(-inf)到 正无穷(+inf)区间上所以元素的降序排名
127.0.0.1:6379> zrangebyscore  zseta -inf +inf withscores
1) "guan"
2) "10"
3) "rui"
4) "20"
5) "csn"
6) "100"

# # 使用 zrevrangebyscore 获取正无穷(+inf)到 负无穷(-inf)区间上所以元素的升序排名 
127.0.0.1:6379> zrevrangebyscore  zseta +inf -inf withscores
1) "csn"
2) "100"
3) "rui"
4) "20"
5) "guan"
6) "10"

#使用 zcard 计算 board 集合的元素个数
127.0.0.1:6379> zcard zseta
(integer) 3

#使用 zrem 删除 board 集合中的一个或多个元素 
127.0.0.1:6379> zrem zseta rui guan
(integer) 2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值