首页 > 其他 > 详细

redis数据类型

时间:2019-06-12 20:29:41      阅读:109      评论:0      收藏:0      [点我收藏+]

一部分常用数据类型操作

具体移步:http://www.redis.cn/commands.html

redis数据类型

String(字符串)

string是redis最基本的类型, 一个key对应一个value

string类型是二进制安全的,意思是redis的string可以包含任何数据. 比如jpg图片或序列化的对象

string类型是redis最基本的类型,string类型的值最大能存储512MB

在redis中字符是基础,其它的数据结构,都是依赖字符的。所以我们字符是关键。

设置一个值  set
127.0.0.1:6379[1]> set key value [EX seconds] [PX milliseconds] [NX|XX]
127.0.0.1:6379[1]> set hello word
OK
获得一个值  get
127.0.0.1:6379[1]> get key
127.0.0.1:6379[1]> get hello
(nil)
127.0.0.1:6379[1]> get hello
"word"
设置多个值  mset
127.0.0.1:6379[1]> mset xing yu name yafeng age 18
OK
127.0.0.1:6379[1]> get xing
"yu"
127.0.0.1:6379[1]> get name
"yafeng"
127.0.0.1:6379[1]> get age
"18"
获取多个值  mget
127.0.0.1:6379[1]> mget xing name age
1) "yu"
2) "yafeng"
3) "18"
删除一个或多个值  del
127.0.0.1:6379[1]> del key [key ...]
127.0.0.1:6379[1]> del hello
(integer) 1
127.0.0.1:6379[1]> get hello
(nil)
删除会返回影响的行数, 但如果没有数据则为0
127.0.0.1:6379[1]> del xing
(integer) 1
127.0.0.1:6379[1]> del xing
(integer) 0
增加1  incr   增加指定值  incrby
127.0.0.1:6379[1]> set age 18
OK
127.0.0.1:6379[1]> get age
"18"
127.0.0.1:6379[1]> INCR age
(integer) 19
127.0.0.1:6379[1]> INCRBY age 10
(integer) 29
最大为2^64的有符号超过就报错
127.0
.0.1:6379[1]> set age 9223372036854775807 OK 127.0.0.1:6379[1]> INCR age (error) ERR value is not an integer or out of range
减少1  decr   减少指定值   decrby
127.0
.0.1:6379[1]> set age 10 OK 127.0.0.1:6379[1]> decr age (integer) 9 127.0.0.1:6379[1]> decrby age 10 (integer) -1
最小为2^64的有符号超过就报错
127.0
.0.1:6379[1]> set age -9223372036854775808 OK 127.0.0.1:6379[1]> get age "-9223372036854775808" 127.0.0.1:6379[1]> DECR age (error) ERR increment or decrement would overflow

与memcache的区别

redis是一个非常棒的高速缓存工具。这个工具和memcache一样,非常的快。在网站的架构中,这二个工具的访问量可以达到同时上W的请求。所以这二个工具任意选择都行。
他们并不会成为工作的瓶颈。而最有可能出现瓶颈的是IO与网络。 所以这二个工具,一定要重点掌握。但是以今天的redis为主。 redis写速度与memcache是一样的。但是读速度,memcache比redis快很多。 redis是可以持久化的,memcache是不能持久化。 redis是有丰富的数据结构类型,memcache是key
=>value redis是单核运行的,memcache是多核运行的 redis是value最大支持512M,memcache是1M memcache里面有最大值:2^64的无符号的 在memcache里面使用负数!不可以的。 redis里面有最大值:2^64的有符号的 在memcache里面直接顺时针方向回到了0,继续前行!! 在redis里面就报错了 在memcache中减到最小数的时候,一直可以减,但是都是0. 在redis中减少到最小数,继续减少,对不起,报错!! 说了这么多,并没有谁好谁坏的说法。工具都是根据项目来需求来定的。公司里面使用redis多,是因为redis的数据结构类型丰富,可以满足很多业务场景需求。因为满足业务场景需求而使用量大

 

Hash(哈希)

redis hash 是一个键值(key=>value)对集合

redis hash 是一个string类型的field 和value的映射表, hash特别适用于存储对象

设置一个hash值   hset
127.0.0.1:6379[1]> hset key field value
key 是在redis里面不能重复的。    
filed是在hash表里面不能重复的。   重复则直接覆盖
value是可以重复的。
127.0.0.1:6379[1]> hset yyf age 18
(integer) 1
127.0.0.1:6379[1]> hget yyf age
"18"
127.0.0.1:6379[1]> hset yyf age 19
(integer) 0
127.0.0.1:6379[1]> hget yyf age
"19"
获取一个hash值   hget
127.0
.0.1:6379[1]> hget key field key 键 field 字段 127.0.0.1:6379[1]> hget yyf age "19"
设置多个hash值   hmset
127.0
.0.1:6379[1]> hmset key field value [field value ...] key 键 是在redis里面不能重复的。 filed 字段 是在hash表里面不能重复的。 value 值 是可以重复的。 127.0.0.1:6379[1]> hmset me name yyf age 18 sex man OK
获取多个hash值   hmget
127.0.0.1:6379[1]>hmget key field [field ...]
key   键
field   字段
127.0.0.1:6379[1]> hmget me name age sex
1) "yyf"
2) "18"
3) "man"
返回一个键所有的字段值   hkeys
127.0.0.1:6379[1]> hkeys key
key   键
127.0.0.1:6379[1]> hkeys me
1) "name"
2) "age"
3) "sex"
返回一个键的长度    hlen
127.0.0.1:6379[1]> hlen key
key  键
127.0.0.1:6379[1]> hlen me
(integer) 3
删除一个或多个字段   hdel
127.0.0.1:6379[1]> hdel key field [field ...]
key 键
field 字段
127.0.0.1:6379[1]> hdel me name age
(integer) 2
127.0.0.1:6379[1]> hkeys me
1) "sex"

 

List(列表)

双向列表:二个口都可以进出

技术分享图片

总结:吃多了,又拉又吐!

 

队列:一个口进,另一个口出:先进先出

 技术分享图片

总结:吃多了,拉出来

 

[]栈:一个口进出,先进后出

 技术分享图片

总结:吃多了,吐出来

从左边插入数据,到指定的队列里面。没有就创建这个。   lpush
127.0.0.1:6379[1]> lpush key value [value ...]
key  键名
value   值(多个)
127.0.0.1:6379[1]> lpush list wang zhao qian shun li
(integer) 5
查看数据   lrange
127.0.0.1:6379[1]> lrange key start stop
key  键名
start  开始位置      从0开始
stop   结束位置      -1位末尾
127.0.0.1:6379[1]> lrange list 1 10
1) "shun"
2) "qian"
3) "zhao"
4) "wang"
127.0.0.1:6379[1]> lrange list 0 10
1) "li"
2) "shun"
3) "qian"
4) "zhao"
5) "wang"
127.0.0.1:6379[1]> lrange list 0 -1
1) "li"
2) "shun"
3) "qian"
4) "zhao"
5) "wang"
从左边弹出数据   并返回弹出的值   lpop
127.0.0.1:6379[1]> lpop key
key  键名

 127.0.0.1:6379[1]> lpop list
"li"
127.0.0.1:6379[1]> lrange list 0 -1
1) "shun"
2) "qian"
3) "zhao"
4) "wang"
从右边弹入数据    rpush
127.0.0.1:6379[1]> rpush key value [value ...]
key  键名
value  值(多个)
127.0.0.1:6379[1]> rpush list li
(integer) 5
127.0.0.1:6379[1]> lrange list 0 -1
1) "shun"
2) "qian"
3) "zhao"
4) "wang"
5) "li"
从右边弹出数据  并返回弹出的值  rpop
127.0.0.1:6379[1]> rpop key
key  键名
127.0.0.1:6379[1]> rpop list
"li"
127.0.0.1:6379[1]> lrange list 0 -1
1) "shun"
2) "qian"
3) "zhao"
4) "wang"
查看长度   llen
127.0.0.1:6379[1]> llen key
key  键名
127.0.0.1:6379[1]> llen list
(integer) 4

通过对这个几个命令的组合,就可以实现双向列表,队列,堆栈!!

 

Set(集合)

添加集合, 不存在就添加    sadd
127.0.0.1:6379[1]> sadd key member [member ...]
key  键名
member   成员   集合中的元素
127.0.0.1:6379[1]> sadd set yyf yyt yyh yyu
(integer) 4
查看集合  显示时是无序的   smembers
127.0.0.1:6379[1]> smembers key
key  键名
127.0.0.1:6379[1]> smembers set
1) "yyu"
2) "yyt"
3) "yyh"
4) "yyf"
随机弹出   spop
127.0.0.1:6379[1]> spop key [count]
key   键名
count   弹出的数量     不写时默认一个
127.0.0.1:6379[1]> spop set
"yyu"
127.0.0.1:6379[1]> spop set 2
1) "yyt"
2) "yyh"
查看长度   scard
127.0.0.1:6379[1]> scard key
key   键名
127.0.0.1:6379[1]> scard set
(integer) 5
交集  返回都有的成员  sinter
127.0.0.1:6379[1]> sinter key [key ...]
key  键名(多个)  
127.0.0.1:6379[1]> sadd set yyt yyf yyg yyj yyh
(integer) 4
127.0.0.1:6379[1]> sadd set1 yyf yyt yyh
(integer) 3
127.0.0.1:6379[1]> sinter set set1
1) "yyt"
2) "yyh"
3) "yyf"
差集  差集是不同的都显示。但是redis不是这样的,它的差集是以第一个集合为主。只显示第一个集合的差!   sdiff
127.0.0.1:6379[1]> sdiff key [key ...]
key  键名(多个)
127.0.0.1:6379[1]> sdiff set set1
1) "yyg"
2) "yyj"
并集   重复的只显示一次  sunion
127.0.0.1:6379[1]> sunion key [key ...]
key 键名(多个)
127.0.0.1:6379[1]> sunion set set1
1) "yyj"
2) "yyh"
3) "yyf"
4) "yyt"
5) "yyg"
插入重复数据
127.0.0.1:6379[1]> scard set
(integer) 5
127.0.0.1:6379[1]> sadd set yyf yyt
(integer) 0
127.0.0.1:6379[1]> scard set
(integer) 5

 

SortedSet(有序集合)

有序集合的排序是通过整型来进行排序的!!

添加有序结合   zadd
127.0.0.1:6379[1]> zadd key [NX|XX] [CH] [INCR] score member [score member ...]
key  键名
zadd  key  数字  字段  数字  字段  数字  字段...............
127.0.0.1:6379[1]> zadd set2 10 zhao 20 qian 30 shun 40 li
(integer) 4
查看数据  zrange
127.0.0.1:6379[1]> zrange key start stop [WITHSCORES]
key  键名
start  开始位置      从0开始
stop   结束位置      -1位末尾
WITHSOCRES   看见数字   可选参数
127.0.0.1:6379[1]> zrange set2 0 -1
1) "zhao"
2) "qian"
3) "shun"
4) "li"
127.0.0.1:6379[1]> zrange set2 0 -1 withscores
1) "zhao"
2) "10"
3) "qian"
4) "20"
5) "shun"
6) "30"
7) "li"
8) "40"
倒序排序   zrevrange
127.0.0.1:6379[1]> zrevrange key start stop [WITHSCORES]
key  键名
start  开始位置      从0开始
stop   结束位置      -1位末尾
WITHSOCRES   看见数字   可选参数
127.0.0.1:6379[1]> zrevrange set2 0 -1
1) "li"
2) "shun"
3) "qian"
4) "zhao"
127.0.0.1:6379[1]> zrevrange set2 0 -1 withscores
1) "li"
2) "40"
3) "shun"
4) "30"
5) "qian"
6) "20"
7) "zhao"
8) "10"
查看长度   zcard
127.0.0.1:6379[1]> zcard key
key  键名
127.0.0.1:6379[1]> zcard set2
(integer) 4
给整形价格指定值   zincrby
127.0.0.1:6379[1]> zincrby key increment member
key 键名
increment  增加的值
member  成员
127.0.0.1:6379[1]> zincrby set2 20 li
"60"
127.0.0.1:6379[1]> zrange set2 0 -1 withscores
1) "zhao"
2) "10"
3) "qian"
4) "20"
5) "shun"
6) "30"
7) "li"
8) "60"

 

 

key(键)

查看所有的key
127.0.0.1:6379[1]> keys *
 1) "set2"
 2) "myhash"
 3) ":1:django.contrib.sessions.cachezxfhdfgas7wu2klnxvfh4zppsh57vbdi"
 4) "me"
 5) ":1:django.contrib.sessions.cacheh40nlu82gj2ku8lmqvwblh83hdcpwat6"
 6) ":1:django.contrib.sessions.cacheay8tms36cfwdf8zjbiyx867gucg5d5ms"
 7) "runoob"
 8) "age"
 9) "_kombu.binding.celery.pidbox"
10) "_kombu.binding.celeryev"
11) "hello"
12) ":1:django.contrib.sessions.cacheomyy1mz2i8e6pls9mdtvrqtdyrtd0ax2"
13) ":1:django.contrib.sessions.cacheefg80nny3l8kjavoyxdiiim5mjjq8bus"
14) "name"
15) "list"
16) "yyf"
17) "_kombu.binding.celery"
18) "set"
19) ":1:django.contrib.sessions.cacheugbzh4eer4cmbnx6qxlhzfmn8cohhnnj"
20) "set1"
查看s开头   
127.0.0.1:6379[1]> keys s*
1) "set2"
2) "set"
3) "set1"
查看s结尾
127.0.0.1:6379[1]> keys *s
1) ":1:django.contrib.sessions.cacheay8tms36cfwdf8zjbiyx867gucg5d5ms"
2) ":1:django.contrib.sessions.cacheefg80nny3l8kjavoyxdiiim5mjjq8bus"

注:这个命令非常的常用,一定要记住。因为我们在测试数据的时候,经常有几百W的数据要测试。测试完了之后,这些数据都没有办法在使用了。必需删除掉之后,重新生成新数据。

所以我们测试的数据,和真实项目的数据。一定要有项目名开头作为key来进行区别。这个时候你的key就应该是bu:12345556

删除这些key的时候,就可以使用bu*,就可以获得到这些key.并进行删除。

 

redis数据类型

原文:https://www.cnblogs.com/yuyafeng/p/10991746.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!