第十四章《redis》

第十四章《redis》

redis(Remote dictionary server):是一个基于键值对(key-value)的NoSQL是一个开源软件
redis的数据是存储在内存当中,可用于好俗缓存,消息队列。redis主要的数据类型有5种;
字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset);

redis的优点
1.速度快 读的速度大约110000/s,写的速度大约85000/s;
2.数据类型多样,可以实现的功能多
3.简单稳定,代码量少,单线程进行工作
4.支持的语言多,perl,python,java,lua等等;
5.持久化
6.主从复制
7.高可用和分布式

缺点:由于数据存储在内存当中,大规模的数据存放在redis中,内存成本太高

set key value [EX seconds] [PX milliseconds] [NX|XX]
EX:设置键值对是添加键过期,单位是秒
PX:设置键值对是添加键过期,单位是微秒

NX:表示这个键是新的,是之前不存在的(用于创建键值对)
XX:表示这个键是存在的(用于修改键值对的值)

redis全局命令:
keys * 查询所有的键
dbsize 统计键的数量总和
exists key 查看这个key是否存在
del key 删除键值对

redis的数据结构类型:
1.字符串
2.hash
3.列表(list)
4.集合(set)
5.有序集合(zset)

键过期:已经存在的键值对设置过期时间:expire key 数字 (单位是秒),当超过过期时间,这个键自动删除;
ttl key:查看这个键的过期时间,如果返回的数字大于0表示还有数字秒过期,返回数字为1表示没有给这个键设置过期时间,返回2,表示这个键不存在或已过期

5种数据结构类型;
在redis中,所有的key都是字符串类型的数据
1.字符串(string):指的是值的数据类型是字符串,包含简单的字符串和复杂的字符串,以及数字、图片、声音、视频等这些二进制; 特点:一个key对应一个value。
单个值大小不超过512M;
命令格式:
1.设置字符串:set key value [ex seconds] [px milliseconds] [nx|xx]
2.获取值: get key
3.查询键是否存在:exists key
4.批量设置键值对:mset key value key value…
5.批量获取值:mget key1 key2…
6.计数:
(1)incr key :对整数数字有效,给key的值增加1,如果这个键不存在,这个命令会设置这个键并且默认值是从0开始增加1;
(2)decr key :自减1,其余和上面保持一致;
(3)incrby key 数字:给key加上数字;
(4)decrby key 数字:给key减去数字;
(5)incrbyfloat 小数 :给key加上小数

7.append key value:给key的值垢面再加上一个字符串;
8.strlen key:显示key对应的value字符串长度
9.getset key newvalue:更新key的值并返回原值;
10.setrange key offset str:更新value某一个位置上的字符串;(如果我们要设置的offset已经超出value的长度,它仍然会把新的字符串添加到下标指定的位置。从value最后一位到指定下标位置全部用“\x00”来填充);
11.getrange key start end:获取部分value;

字符串的内部编码:redis 根据key对应的value的长短、类型来判断使用哪种内部编码
int: 8字节长度的整数;
embstr: 小于等于39个字节的字符串;
raw: 大于39个字节的字符串

object encoding key:查看key对应value的内部编码

哈希(hash): key-value=(filed1,value1 filed2,value2…) key对应的不是一个value,而是一组或几组(filed,value)

hash命令格式
设置键值:hset key field value 成功返回1,不成功返回0

获取filed值:
hget key field

删除filed值
hdel key filed1 filed2 .。。

统计field的个数
hlen key

批量设置和获取filed value
hmset key filed1 value1 filed2 value2.。。

获取所有filed
hkeys key

获取所有filed的值
hvals key

获取所有的filed和value:
hgetall key

filed的value如果是整数
hincrby key filed count 给filed添加一个数字,如果filed不存在,会创建filed
hincrbyfloat key filed float 给filed添加一个小数;

计算value的字符串长度
hstrlen key filed

hash内部编码:
ziplist:当hash类型元素(filed和value的和)个数不小于512个,单个value的长度小于64字节;
hashtable(哈希表):不满足ziplist的条件
object encoding key 查看内部编码;
列表list:key-(一组有序排列的元素)a b c d e这一组元素他是有序排列的,所以可以通过下标来获取对应的元素,元素最多不超过2^32-1个;

列表类型 的2个特点:1.元素的有序性 2.元素可重复

列表的命令:
添加元素:
lpush key value1 value2 … 从列表的左边添加元素;
rpush key value1 value2 …从列表的右边添加元素
linsert key before | after pivot value 在原有的某个元素前边/后边添加一个新的元素

查看列表里的元素:
lrange key start end

lindex key index 获取下标为index的元素
获取列表元素的个数:
llen key
删除列表元素:
lpop key 从列表左边删除一个元素
rpop key 从列表右边删除一个元素
lrem key count value 删除指定元素,count>0表示从列表的左端开始删除,count表示删除这个元素的个数;count<0表示从列表右端开始删除,count的相反数表示删除这个元素的个数,count=0表示删除列表内所有的这个元素,如果想要删除的元素不存在,则不删除。

修改:
lset key index newvalue 修改列表index对应的值

阻塞操作:
blpop key timeout 从左边删除,如果key里的元素被删光了就会阻塞timeout秒
brpop key timeout 从右边删除,如果key里的元素被删光了就会阻塞timeout秒

列表的内部编码:
ziplist:元素个数不超过512,每个元素的长度不超过64字节
linkedist(链表):不满足ziplist条件就会用linkedist

集合(set):集合也是用来保存多个字符串元素的,他的元素不能重复,他的元素是无序的,不能通过下标查看元素,元素不超过512个,每个元素的长度不能超过64字节;
能够进行集合间的运算:交集、差集、并集
{0,1,2,3,4} {1,4,5,7,8}
交集:{1,4}
差集:{0,2,3,5,7,8}
并集:{0,1,2,3,4,5,7,8}

命令:
1、添加元素:
sadd key member1 member2…
2.删除元素
srem key member1 member2…
3.统计元素
scard key
4.随机从集合中返回指定个数的元素:
srandmember key [count] count 不写默认返回1个
5.随机删除集合中指定个数的元素:
spop key [count]
6.查看集合内所有元素
smembers key

集合间的操作:
交集:sinter key1 key2…
差集:sdiff key1 key2…
并集:sunion key1 key2…

差集:key1的元素-key1和key2共同有的元素

myset3 [a b c d e f]
myset4 [a b c d i h k]
myset3-myset4 [e f]
myset4-myset3 [i h k]

集合的内部编码
intest(整数集合):当集合中的元素都是整数且元素个数少于512,redis会使用intest来保存数据
hashtable:

有序集合(zset):和集合一样元素不重复,不同的是它通过给元素加上一个分数(score)来进行排序

命令:
1.添加成员:
zadd key score member…

2.统计有序集合元素个数
zcard key

3.获取某个成员的分数
zscore key member

4.获取成员排名
zrank key member 分数由低到高来排 返回数字就是排名(从0开始)
zrevrank key member 分数由高到低来排
5.删除成员
zrem key member1 member2.。。

6.增加元素的分数
zincrby key incr-score(增加的分数) member

7.查询指定排名范围的成员:
zrange key start end [withscores] 由低到高
zrevrange key start end [withscores] 由高到低

8.查询指定分数范围的成员:
zrangebyscore key minscore maxscore [withscores] [limit offset count] 由低到高
zrevrangebyscore key minscore maxscore [withscores] [limit offset count] 由高到低

-inf:无限小
+inf:无限大

9.查询指定分数范围的成员个数
zcount key min max

10.删除指定排名范围的成员:
zremrangebyrank key start ent

11.删除指定分数范围的成员
zremrangebyscore key min max

集合间的操作:
交集:zinterstore destination key1 key2 [weights num1 num2] [aggregate sum|min|max]

numkeys:交集计算的有序集合的个数
weights:权重

并集:zunionstore destination numkeys key1 key2 [weight num1 num2] [aggregate sum|min|max]

内部编码:
ziplist:元素个数2^32-1,单个元素长度不超过64M
skiplist(跳跃表):

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另开终端
在这里插入图片描述
在这里插入图片描述
多开redis
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101964.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号