码迷,mamicode.com
首页 > 其他好文 > 详细

Redis五大数据类型(未完)

时间:2020-07-04 13:46:51      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:分布式锁   指定元素   开放源代码   flush   大数据   exp   head   use   mon   

redis五大数据类型

技术图片

翻译:

Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库缓存消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超级日志,带有半径查询和流的地理空间索引。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供高可用性。

redis-key

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name crowned
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> exists name  #查询是否存在
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> move name 1 #移动key
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name crowned
OK
127.0.0.1:6379> get name
"crowned"
127.0.0.1:6379> expire name 10 #设置key的过期时间
(integer) 1
127.0.0.1:6379> ttl name #查看当前key的剩余时间
(integer) 6
127.0.0.1:6379> ttl name
(integer) 3
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
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> type name #查看当前key的类型
string
127.0.0.1:6379> type age
string
?

有不会的命令可以在官网查询文档

技术图片

 

String(字符串)

127.0.0.1:6379> strlen name #获取字符串的长度
(integer) 7
127.0.0.1:6379> append name hello #追加字符串,如果当前key不存在,就等于set key
(integer) 12
127.0.0.1:6379> get name
"crownedhello"
######################################
127.0.0.1:6379> set views 0 #初始量为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> get views
"2"
127.0.0.1:6379> decr views #自减1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> incrby views 10 #设置步长 指定增量
(integer) 11
127.0.0.1:6379> get views
"11"
127.0.0.1:6379> decrby views 5
(integer) 6
127.0.0.1:6379> get views
"6"
#############################################
#字符串范围 range
127.0.0.1:6379> set key1 hello,crowned #设置key1的值
OK
127.0.0.1:6379> get key1
"hello,crowned"
127.0.0.1:6379> getrange key1 0 3 #截取字符串
"hell"
127.0.0.1:6379> getrange key1 0 -1 #获取全部字符串 等于get key
"hello,crowned"
127.0.0.1:6379>
#################################
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> setrange key2 1 xx #替换指定位置开始的字符串
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
#######################################
# setex (set with expire) 设置过期时间
# setnx (set if not exist) 不存在再设置(再分布式锁中常常使用)
127.0.0.1:6379> setex key1 10 hello #设置key1的值为hello,10秒后过期
OK
127.0.0.1:6379> ttl key1
(integer) 6
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> setnx key2 redis #如果不存在key2 就创建key2
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
127.0.0.1:6379> ttl key1
(integer) -2
127.0.0.1:6379> setnx key2 mongodb #如果key2存在 就创建失败
(integer) 0
127.0.0.1:6379> get key2
"redis"
######################################
127.0.0.1:6379> keys *
(empty array)
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 k1 v1 k4 v4 #msetnx是一个原子性操作,要么一起操作,要么都失败
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379>
############################################
#设置对象
set user:1{name:zhangsan,age:3} #设置一个user:1对象 值为json字符来保存一个对象
#这里的key是一个巧妙地设计: user:{id}:{filed} 这个设计在redis中是ok的
127.0.0.1:6379> mset user:1:name crowned user:1:age 18
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "crowned"
2) "18"
########################################
#getset 先get再set
127.0.0.1:6379> getset redis mongodb #如果不存在值,则返回nil
(nil)
127.0.0.1:6379> get redis
"mongodb"
127.0.0.1:6379> getset redis hello #如果存在值,获取原来的值,并设置新的值
"mongodb"
?
?
?
?
?

 

List(列表)

基本的数据类型,列表。

##################################################
127.0.0.1:6379> lpush list 1 #将一个值或多个值插入列表的头部(左)
(integer) 1
127.0.0.1:6379> lpush list 2
(integer) 2
127.0.0.1:6379> lpush list 3
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange list 0 1
1) "3"
2) "2"
############################################
?
127.0.0.1:6379> lpop list #移除list的第一个元素
"3"
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "1"
127.0.0.1:6379> rpop list #移除list的最后一个元素
"1"
127.0.0.1:6379> lrange list 0 -1
1) "2"
############################################
127.0.0.1:6379> lindex list 0 #通过下标获得list的值
"2"
################################################
?
127.0.0.1:6379> lrange list 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "2"
127.0.0.1:6379> lrem list 1 2 #移除list集合中指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
################################################
127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist hello2
(integer) 2
127.0.0.1:6379> rpush mylist hello3
(integer) 3
127.0.0.1:6379> rpush mylist hello5
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2  #通过下标截取指定的长度,list被改变了,只剩下截取的元素
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) "hello3"

 

set(集合)

set中的值是不能重复的。

################################################
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> sadd myset hello   #set集合中添加元素
(integer) 1
127.0.0.1:6379> sadd myset world
(integer) 1
127.0.0.1:6379> smembers myset #查看指定set的所有值
1) "world"
2) "hello"
127.0.0.1:6379> sismember myset hello  #判断某一个值在不在set中
(integer) 1
127.0.0.1:6379> sismember myset 1111
(integer) 0
################################################
127.0.0.1:6379> scard myset  #获取set集合中的内容元素个数
(integer) 2
################################################
127.0.0.1:6379> srem myset hello  #移除set集合中的指定元素
(integer) 1
127.0.0.1:6379> scard myset
(integer) 1
127.0.0.1:6379> smembers myset
1) "world"
################################################
set是无序不重复集合 可以抽随机
127.0.0.1:6379> srandmember myset  #随机抽选出一个元素
"hello"
127.0.0.1:6379> srandmember myset
"9411"
127.0.0.1:6379> srandmember myset
"world"
127.0.0.1:6379> srandmember myset 2 #随机抽取指定个数的元素
1) "world"
2) "9411"
################################################
127.0.0.1:6379> spop myset #随机删除set集合中的元素
"9411"
127.0.0.1:6379> spop myset
"world"
127.0.0.1:6379> smembers myset
1) "hello"
################################################
微博、B站 好友间共同关注功能(交集)
数字集合类:
- 差集:sdiff
- 交集:
127.0.0.1:6379> sadd set1 a   #差集
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sadd set2 b
(integer) 1
127.0.0.1:6379> sadd set2 c
(integer) 1
127.0.0.1:6379> sadd set2 d
(integer) 1
127.0.0.1:6379> sdiff set1 set2
1) "a"
127.0.0.1:6379> sinter set1 set2 #交集   共同好友、共同关注就可以这样实现
1) "c"
2) "b"
127.0.0.1:6379> sunion set1 set2 #并集
1) "b"
2) "c"
3) "d"
4) "a"
?
推荐好友功能(六度分割理论)
?
?
?

 

Hash(哈希)

Map集合,key-<key-value>

Redis五大数据类型(未完)

标签:分布式锁   指定元素   开放源代码   flush   大数据   exp   head   use   mon   

原文地址:https://www.cnblogs.com/crowned/p/13234377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!