1.1-Redis的数据结构

一.五种数据类型:

  • 1.字符串(String)
  • 2.字符串列表(list)
  • 3.有序字符串集合(sorted set)
  • 4.哈希(hash)
  • 5.字符串集合(set)

1.1字符串(String)

常用命令

  • 赋值:
set 键 值
  • 取值:
get 键
getset 键 新值   -->得到键的值,并赋予新值
  • 删除:
del 键
  • 数值增减:
incr 键    -->给这个值+1,也就是递增
如果键没有值,那么给键赋值0并且+1;
如果键不能转成数值,那么报错;
decr 键 -->递减,与递增同理;
  • 拓展命令:
incrby 键 数 -->递增键这个值数这么多;
原理同incr 键
decrby 键 数 -->递减键这个值数这么多;
原理同decr 键
append 键 新值 -->在键的这个值后面加上新值;
如果键的值存在,那么在后面拼接新值;
如果键的值不存在,那么创建这个键的值为新值;

1.2字符串列表(list)

按照插入顺序排序的字符串链表,和数据结构中的链表是一样的,可以在头部和尾部插入元素.链表的两头插入和删除是非常效率的.如果是作用在链表的中间的,就不太效率了.list中可以有重复元素

1.2.1ArrayList使用数组方式,根据索引查询速度非常快,但是新增和删除比较慢
1.2.2LinkedList使用双向链接方式,每个元素都记录了前后元素的指针,所以插入和删除数据只是改变前后元素的指针指向即可,所以非常效率.

常用命令

  • 两端添加
//左侧插入
lpush list名 值1 值2 值3 -->创建一个名为list名的list 如果存在这个list 就向里面添加值1,值2,值3;如果不存在就创建一个list并向其中添加值1,值2,值3;这时候他是这个样子的:
值3 值2 值1
//右侧插入
rpush list名 值1 值2 值3 -->创建一个名为list名的list 如果存在这个list 就向里面添加值1,值2,值3;如果不存在就创建一个list并向其中添加值1,值2,值3;这时候他是这个样子的:
值1 值2 值3
  • 查看列表
lrange my list名 start end -->查看名为list名的list中的元素,从第start开始,到第end结束;这里注意start和end可以是负数,当时-1时,表示的是最后一个元素,同理,-2就是倒数第二个元素.
  • 两端弹出
//左侧弹出
lpop list名 -->这个就是把左面的(头部)第一个元素弹出,弹出成功返回这个元素,如果这个元素为空返回nil
//右侧弹出
rpop list名 -->这个就是把右面的(尾部)第一个元素弹出,弹出成功返回这个元素,如果这个元素为空返回nil
  • 获取列表元素个数
llen list名 -->获取list名的元素个数.
  • 拓展命令
//插入
//仅当list存在时才会向头部插入值
lpushx list名
//仅当list存在时才会向尾部插入值
rpushx list名
//更改某一个元素的值,更改第角标个元素的值为value,如果这个元素不存在返回nil
lset list名 角标 value
//在某一个元素之前插入一个值
insert list名 before 值1 值2 -->在名为list名的链表中,在值为值1的元素前面插入一个值为值2的元素.
//在某一个元素之后插入一个值
insert list名 after 值1 值2 -->在名为list名的链表中,在值为值1的元素后面插入一个值为值2的元素.
//删除
//删除list中count个值是value的元素,如果count>0就从左边开始遍历删除,count<0就从右边开始遍历删除;count=0就删除所有值时value的元素.
lrem list名 count value
//尾部弹出添加到头部
rpoplpush list名1 list名2 -->将list名1的尾部元素弹出,压入到list名2的头部;

1.3哈希(hash)

哈希类型可以看成是Java中的Map<String,String>
常用命令

  • 赋值
hset map名 键 值 -->给名为map名的hash赋值一个键值对;
hmset map名 键1 值1 键2 值2 ... -->给名为map名的hash一起赋很多值
  • 取值
hget map名 键 -->得到名为map名的hash中的key为键的值;
hmget map名 键1 键2 ..  ->>得到名为map名的hash中的多个键的值;
hgetall map名 -->获取这个map名的hash中的所有键和值;
  • 删除
hdel map名 键 -->删除map名的hash中的key为键的值
del map名 -->删除整个map名的hash
  • 数值增减
hincrby map名 键 数 -->给名为map名的hash的key为键的值 +数;
  • 其他
    判断值存在否?
hexists map名 键 -->判断名为map名的hash的key为键的值存在否?存在返回1;不存在返回0;

有多少个键值对

hlen map名 -->返回有多少个键值对;

获得所有的key

hkeys map名 -->得到所有的key

获得所有的值

hvalues map名 -->得到所有的valu

1.4字符串集合(set)

和List类型不同的是,Set集合中不允许出现重复的元素
常用命令

  • 添加/删除元素
sadd myset名 值1 值2 值3 -->向名为myset名的set中添加值1 值2 值3,如果值存在那么添加不进去.
srem myset名 值1 值2 -->删除名为myset名的set的值1 值2 元素
  • 获得集合中的元素
smembers myset名 -->查看名为myset名的set中的所有值
  • 集合中的差集运算
    返回两个集合中相差的元素
sdiff myset名1 myset名2 -->列出两个set集合的不同的元素,按照key的顺序排列.
  • 集合中的交集运算
sinter myset名1 myset名2 -->求出两个set集合交集部分
  • 集合中的并集运算
sunion myset名1 myset名2 -->合并
  • 拓展命令
    判断某个值是否在某个set中
sismember myset名 值1 -->判断值1是否在名为myset名的set中

获得set中成员的数量

scard myset名 -->得到myset名的具体数量

随机获得set中的一个元素

srandember myset名 -->返回myset名中的一个随机元素

把两个set的相差元素存到一个新的set中

sdiffstore newset set1 set2 -->把set1和set2的差值元素保存到newset中.

把两个set的交集元素存到一个新的set中

sinterstore newset set1 set2 -->把set1和set2的交集元素保存到newset中.

把两个set的并集元素存到一个新的set中

sunionstore newset set1 set2 -->把set1和set2的并集元素保存到newset中.

使用场景:跟踪一些唯一性的一些访问.

1.5有序字符串集合(sorted set)

与set的区别是,有一个分数与每一个元素对应,也就是元素的位置是有序的.
常用命令

  • 添加元素
zadd sort名 分数1 元素1 分数2 元素2 -->向名为sort名的sorted set中添加元素1 和元素2;他们的分数是分数1 和分数2;如果向该sorted set中添加重复的元素,后添加的元素分数会替换之前的.
  • 获得元素
zscore mysort名 元素1 -->获取名为mysort名中元素1的分数值
zcard mysort名 -->获取mysort名的set的元素个数
  • 删除元素
zrem mysort名 元素1 元素2 -->删除set中的元素1和元素2
zremrangebyrank mysort名 0 4 -->按照范围删除,从第一个开始,删除四个
zremrangebyscore mysort名 80 100 -->删除80 到100之间分数的元素
  • 范围查询
zrange mysort名 0 -1 -->查询名为mysort名的set的元素,从第一个到最后一个
zrange mysort名 0 -1 withscores -->查询名为mysort名的set的元素,从第一个到最后一个,并且连同分数一起查询出来.元素在前,分数在后.这个是按照分数由小到大排序的.
zrevrange mysort名 0 -1 withscores -->从大到小的排名
  • 扩展命令
    返回分数在某个之间的元素,并且按分数从低到高排序
zrangebyscore mysort名 0 100 withscores limit 0 2 -->返回分数由低到高且分数0到100的两个元素和分数.

给某个元素分数增加

zincrby mysort名 数 元素1 -->给mysort名的set中的元素1的分数加上一个数; 

获取某个分数区间的元素个数

zcount mysort 数1 数2 -->显示分数在数1和数2中的元素的个数;

使用场景:大型游戏的积分排行榜

二.Key定义的注意点

  • 1.不要过长,最好不要超过1024字节;
  • 2.不要过短,影响可读性;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容