Redis

  • Redis(REmote DIctionary Server)是一个非常流行的基于内存的轻量级键值数据库(key-value database)。与其把Redis称为一种数据库,不如说Redis是一种数据结构服务器更为恰当。Redis原生地在内存中实现了多种类型的数据结构,并提供了操作这些数据结构的多种API。更加重要的是,作为一个需要长期运行的数据存储服务,Redis还提供了高性能命令处理、高可靠性/扩展性的架构及数据持久化等特性。
    Redis时一个完全用C语言编写的开源软件。
    Redis中的术语实例代表一个redis-server进程。同一台主机上可以运行多个Redis实例,只要这些实例使用不同的配置即可,比如绑定到不同的端口上、使用不同的路径保存数据持久化相关的文件,或采用不同的日志路径等。
    Redis作为一种数据存储服务,如何正确的停止Redis服务端就非常重要了,强烈建议使用shutdown命令。发出shutdown命令后,首先redis-server会停止响应客户端的连接,然后如果启用了持久化,则会执行数据持久化操作,之后,如果.pid文件和socket套接字文件描述符存在的化,则对其进行清理,并最终退出操作。应该注意的是,使用kill命令或其他进程管理工具向Redis进程发送SIGERM(15)信号基本上等同于使用shutdown命令优雅的停止redis-serve。
    Redis以其高性能而闻名,它最大程度的利用单线程、非阻塞、多路复用的I/O模型来快速的处理请求。当然在某些情况下,Redis也会创建线程或子进程来执行某些任务。Redis包含了一个简单的但功能强大的异步事件库,称为ac。
    Redis基本上就是一个接受并处理来自客户端请求的非阻塞、I/O复用的TCP服务器。虽然Redis服务器很复杂,但我们可以使用各种编程语言通过TCP协议与Redis进行通信。对于Redis来说,这种通信协议叫做REdis Serialization Protocol(RESP,Redis序列化协议)。
    Redis 与其他 key - value 缓存产品有以下三个特点:
  1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;
  3. Redis支持数据的备份,即master-slave模式的数据备份。
  • Redis 优势:
    性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s ;
    丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作;
    原子:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来;
    丰富的特性:Redis还支持 publish/subscribe, 通知, key 过期等等特性。

  • 单线程的redis为什么这么快:
    纯内存操作;
    单线程操作,避免了频繁的上下文切换;
    采用了非阻塞I/O多路复用机制。

安装Redis

  1. 安装编译工具:
    sudo apt-get install build-essential

  2. 为Redis创建目录并切换到所创建的目录中:
    mkdir /redis
    cd /redis

  3. 下载Redis
    wget http://download.redis.io/releases/redis-4.0.1.tar.gz

  4. 解压下载的Redis源码并切换到对应的目录下:
    tar -zxvf redis-4.0.1.tar.gz
    cd redis-4.0.1

  5. 为Redis的配置文件创建目录并把默认的文件复制进去:
    mkdir /redis/conf
    cp redis.conf /redis/conf

  6. 编译依赖项:
    cd deps
    make hiredis lua jemalloc linenoise
    cd …

  7. 编译Redis:
    make

  8. 安装Redis:
    make PREFIX=/redis install

  9. 进入/redis目录并验证生成了Redis的二进制可执行文件:
    cd /redis/bin

  • Redis遵循如下的标准版本号实践,即major:minor:patch(主版本号:次版本号:补丁版本号)的层次形式。偶数的主版本号代表稳定版,奇数的主版本号表示不稳定。

Memcache与Redis的区别

  • 存储方式:Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,Redis可以持久化数据;
  • 数据支持类型:memcached所有的值均是简单的字符串,Redis作为其替代者,支持更为丰富的数据类型 ,提供list,set,zset,hash等数据结构的存储;
  • 底层模型不同:它们之间底层实现方式以及与客户端之间通信的应用协议不一样。 Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
  • value 值大小不同:Redis 最大可以达到 1gb;memcache 只有 1mb。
  • Redis的速度比memcached快很多;
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 为什么是单线程的

  • 官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了,Redis利用队列技术将并发访问变为串行访问。
    1)绝大部分请求是纯粹的内存操作(非常快速);
    2)采用单线程,避免了不必要的上下文切换和竞争条件;
    3)非阻塞IO优点:
    速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
    支持丰富数据类型,支持string,list,set,sorted set,hash
    支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
    丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

  • 如何解决redis的并发竞争key问题
    同时有多个子系统去set一个key。这个时候要注意什么呢? 不推荐使用redis的事务机制。因为我们的生产环境,基本都是Redis集群环境,做了数据分片操作。你一个事务中有涉及到多个key操作的时候,这多个key不一定都存储在同一个redis-server上。因此,redis的事务机制,十分鸡肋。
    (1)如果对这个key操作,不要求顺序: 准备一个分布式锁,大家去抢锁,抢到锁就做set操作即可;
    (2)如果对这个key操作,要求顺序: 分布式锁+时间戳。 假设这会系统B先抢到锁,将key1设置为{valueB 3:05}。接下来系统A抢到锁,发现自己的valueA的时间戳早于缓存中的时间戳,那就不做set操作了。以此类推。
    (3)利用队列,将set方法变成串行访问也可以。redis遇到高并发,如果保证读写key的一致性对Redis的操作都是具有原子性的,是线程安全的操作,你不用考虑并发问题,redis内部已经帮你处理好并发的问题了。

Redis的基本操作

# 1. 启动Redis
$ bin/redis-server

# 启动时指定配置文件的位置
$ bin/redis-server conf/redis.conf# 如果是从操作系统的软件仓库中安装的Redis,那么可以使用init.d脚本启动Redis:
$ /etc/init.d/redis-server start# 如果要以redis-server守护进程的方式在后台启动Redis,那么可以编辑配置文件并将daemonize参数设置为yes并使用该配置文件启动;
$ vim conf/redis/conf
daemonize yes
$ bn/redis-server conf/redis.conf# 停止Redis
# 如果Redis是以前台模式启动可以使用Ctrl+C;# 如果Redis是以后台模式启动可以使用kill+PID;# 更加优雅和推荐的停止Redis的方式是通过redis-cli调用shutdown命令:
$ cd redis
$ bin/redis-cli shutdown# 如果Redis是从软件仓库中安装的话,可以通过init.d脚本关闭:
$ /et/init.d/redis.server stop#连接Redis
#使用redis-cli默认会连接到127.0.0.1:6379上运行的Redis实例。
#可以使用-h选项指定要连接到的主机名/IP地址;
#可以使用-p选项指定端口号;
#如果Redis实例启动了连接密码,可以使用-a选项在连接到Redis时指定密码;
#如果Redis实例启用了Unix套接字文件,可以使用-s选项指定Unix套接字文件。

数据类型-字符串类型

字符串类型是编程语言和应用程序中最常见和最常用的数据类型,也是Redis的基本数据类型之一。事实上,Redis中所有的键都必须是字符串;string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象;string类型是 Redis最基本的数据类型,string类型的值最大能存储512MB。
01.使用set设置;

02.使用get获取;

03.当get一个不存在的键时会返回(nil);
04.strlen命令返回键对应值的长度;

05.对于不存在的键执行,strlen命令会返回0;
06.使用append命令可以向一个键的字符串值末尾追加字符串;

07.使用setrange命令可以覆盖字符串值的一部分;

set命令执行成功,Redis会返回OK。append命令会将字符串追加到现有字符串的末尾,并返回新字符串的长度,如果键不存在,那么Redis将首先创建一个空字符串并与键相关联,然后再执行append命令。setrange命令会覆盖字符串的一部分(从指定的偏移位置开始,直到整个字符串的末尾)。在Redis中,字符串的偏移是从0开始的。setrange命令会在覆盖完成后返回新字符串的长度。如果某个键已经存在,那么set命令会覆盖该键此前对应的值。可以使用exist命令来测试键的存在性。可以使用setnx命令在键不存在时设置键的值。setnx键的值设置成功,则返回1,如果键已经存在,则返回0且不覆盖原来的值。setxx命令用于在键存在时设置键的值。
mset和mget命令一次性的设置和获取多个键的值。

Redis使用了三种不同的编码方式来存储字符串对象,并会根据每个字符串值自动决定所使用的编码方式:
int:用于能够使用64位有符号整数表示的字符串;
embstr:用于长度小于或等于44字节(在Redis3.x中曾经是39字节)的字符串,这种类型的编码在内存使用和性能方面更有效率;
raw:用于长度大于44字节的字符串。
可以使用object encoding命令来查看与键相关联的Redis值对象的内部编码方式。

序号 命令 描述
1 SET key value 设置指定 key 的值
2 GET key 获取指定 key 的值。
3 GETRANGE key start end 返回 key 中字符串值的子字符
4 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
5 GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6 MGET key1 [key2…] 获取所有(一个或多个)给定 key 的值。
7 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8 SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9 SETNX key value 只有在 key 不存在时设置 key 的值。
10 SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11 STRLEN key 返回 key 所储存的字符串值的长度。
12 MSET key value [key value …] 同时设置一个或多个 key-value 对。
13 MSETNX key value [key value …] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14 PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15 INCR key 将 key 中储存的数字值增一。
16 INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
17 INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
18 DECR key 将 key 中储存的数字值减一。
19 DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
20 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

数据类型-集合(set)类型

集合类型是由唯一、无序对象组成的集合。经常用于测试某个成员是否在集合中、重复项删除和集合运算。Redis的值对象可以是字符串集合。
01.sadd向集合中添加;

02.sismember测试一个元素是否在集合中;

03.srem从集合中删除元素;

04.scard命令获取集合中成员的数量;

05.smembers获取集合中的所有元素(元素较多时会造成服务器阻塞,可以使用sscan增量获取集合元素);

  • 在Redis中,一个集合最多可以容纳 232 - 1 个成员。
    Redis在内部使用两种编码方式来存储集合对象:
    intset:对于那些元素都是整数,且元素个数小于配置中set-max-intset-entries选项设置的值(默认512)的集合;
    hashtable:intset不适用时的默认编码。
序号 命令 描述
1 SADD key member1 [member2] 向集合添加一个或多个成员
2 SCARD key 获取集合的成员数
3 SDIFF key1 [key2] 返回给定所有集合的差集
4SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
5 SINTER key1 [key2] 返回给定所有集合的交集
6 SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
7 SISMEMBER key member 判断 member 元素是否是集合 key 的成员
8 SMEMBERS key 返回集合中的所有成员
9 SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合
10 SPOP key 移除并返回集合中的一个随机元素
11 SRANDMEMBER key [count] 返回集合中一个或多个随机数
12 SREM key member1 [member2] 移除集合中一个或多个成员
13 SUNION key1 [key2] 返回所有给定集合的并集
14 SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素

数据类型-哈希(hash)类型

哈希表示字段与值之间的映射关系。Redis数据集本身就可以被看作一个哈希,其中字符串类型的键关联的诸如字符串和列表之类的数据对象。而Redis的数据对象也可以再次使用哈希,其字段和值必然是字符串类型。为了与Redis的键进行区分,我们使用字段(field)来表示哈希中值对象所关联的键。
01.hmset key field value [field value …]设置;

02.hmget key field [field …]获取;

03.hexists key field 检查一个哈希中是否存在某个字段;

04.hgetall key 获取一个哈希中的所有字段和值;(不建议对数据量巨大的哈希使用hgetall)

05.hset命令设置或修改单个字段的值;

06.hdel命令删除一个哈希中的字段;

07.hset和hmset会覆盖现有的字段,hsetnx命令仅在字段不存在时设置字段的值;

08.对于不存在的键或字段,hget,hmget返回nil;

一个哈希最多能容纳 232 - 1 个字段。如果一个哈希的字段非常多,那么在执行hgetall命令时可能会阻塞Redis服务器。我们可以使用hscan命令来增量的获取所有字段和值。
hscan是Redis中scan命令的一种(scan、hscan、sscan、zscan),该命令会增量的迭代遍历元素,从而不会造成服务器阻塞。hscan命令是一种基于指针的迭代器。

当服务器返回的新游标为0时,表示整个遍历完成:

  • Redis在内部使用两种编码来存储哈希对象:
    ziplist:对于长度小于配置中hash-max-ziplist-entries选项配置的值(默认为512),且所有元素的大小都小于配置中hash-max-ziplist-value选项配置的值(默认为64字节);
    hashtable:当ziplist不适用时使用的默认编码。
序号 命令 描述
1 HDEL key field1 [field2] 删除一个或多个哈希表字段
2 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。
3 HGET key field 获取存储在哈希表中指定字段的值。
4 HGETALL key 获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7 HKEYS key 获取所有哈希表中的字段
8 HLEN key 获取哈希表中字段的数量
9 HMGET key field1 [field2] 获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
11 HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
12 HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。
13 HVALS key 获取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。

数据类型-有序集合(sorted set)类型

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
01.zadd存入集合;

02.zrevrange获取;

03.zincrby指定元素增加指定值;

04.zrevrank获取指定元素的排名;

05.zscore获取指定元素的分数;

06.zadd 选项NX能够在不更新已存在元素的前提下添加新元素,选项XX能够在不添加新元素的前提下,更新已存在元素;(这些选项只适用Redis 3.0.2或更高版本)

  • Redis在内部使用两种编码方式存储有序集合对象;
    ziplist:对于那些长度小于配置zset-max-ziplis-entries选项配置的值(默认为128),且所有元素的大小都小于配置中zset-max-ziplist-value选项配置的值(默认为64字节)的有序集合采用此编码;
    skiplist:当ziplist不适用时使用此编码。
序号 命令 描述
1 ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
2 ZCARD key 获取有序集合的成员数
3 ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
4 ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
5 ZINTERSTORE destination numkeys key [key …] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
6 ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量
7 ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合指定区间内的成员
8 ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序集合的成员
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员
10 ZRANK key member 返回有序集合中指定成员的索引
11 ZREM key member [member …] 移除有序集合中的一个或多个成员
12 ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员
13 ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员
14 ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员
15 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
16 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
17 ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18 ZSCORE key member 返回有序集中,成员的分数值
19 ZUNIONSTORE destination numkeys key [key …] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

数据类型-列表(list)类型

列表是应用程序开发中非常有用的数据类型之一。列表能够存储一组对象,因此它可以被用作栈或者队列。在Redis中,与键相关联的值可以是字符串组成的列表。Redis中的列表更像是数据结构中的双向链表。
01.lpush在列表的左端插入,返回插入后列表的长度;

02.lrange获取列表中的所有值;

03.rpush在列表的右端插入,返回插入后列表的长度;

04.lindex获取指定索引位置的值;

05.linsert将元素插入到列表的指定位置,返回插入后列表的长度;
06.lpushx列表存在时从左端插入;
07.rpushx列表存在时从右端插入;
08.lpop从列表左端删除一个元素;

09.rpop从列表右端删除一个元素;
在Redis中,一个列表最多能容纳 232 - 1 个元素。假设列表中有N个元素;列表的索引可以按照从左到右的方式指定为0->N-1,也可以按照从右到左的方式指定为-1->-N。
10.ltrim命令可用在删除列表中的多个元素的同时,只保留由start和end索引所指定范围内的元素;
11.lset命令设置列表中指定索引位置处的元素值。
Redis在内部使用quicklist存储列表对象。有两个配置选项可以调整列表对象的存储逻辑:
list-max-ziplist-size:一个列表条目中一个内部节点的最大大小
list-compress-depth:列表压缩策略。

序号 命令 描述
1 BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
2 BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
3 BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4 LINDEX key index 通过索引获取列表中的元素
5 LINSERT key BEFORE AFTER pivot value
6 LLEN key 获取列表长度
7 LPOP key 移出并获取列表的第一个元素
8 LPUSH key value1 [value2] 将一个或多个值插入到列表头部
9 LPUSHX key value 将一个值插入到已存在的列表头部
10 LRANGE key start stop 获取列表指定范围内的元素
11 LREM key count value 移除列表元素
12 LSET key index value 通过索引设置列表元素的值
13 LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
14 RPOP key 移除列表的最后一个元素,返回值为移除的元素。
15 RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
16 RPUSH key value1 [value2] 在列表中添加一个或多个值
17 RPUSHX key value 为已存在的列表添加值

数据类型-HyperLogLog(HLL)类型

Redis在2.8.9版本添加了HyperLogLog结构。Redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog 不能像集合那样,返回输入的各个元素。
01.pfadd;


02.pfcount;

  • HLL实际上是被当做字符串存储的。因此作为一个键值对,可以很容易被持久化至外部或从外部持久化中恢复。在Redis内部,使用两种方式存储HLL对象:
    稀松(Sparse):对于那些长度小于配置中hll-sparse-max-bytes选项配置的值(默认为3000)的HLL对象,采用此编码。稀松表示方式的存储效率更高,但可能消耗更多的CPU资源;
    稠密(Dense):当稀松方式不能适用时的默认编码。
序号 命令 描述
1 PFADD key element [element …] 添加指定元素到 HyperLogLog 中。
2 PFCOUNT key [key …] 返回给定 HyperLogLog 的基数估算值。
3 PFMERGE destkey sourcekey [sourcekey …] 将多个 HyperLogLog 合并为一个 HyperLogLog

数据类型-Geo类型

Redis从3.2版本开始正式引入了Geo(地理位置)相关的API,用于支持存储和查询这些地理位置相关场景的坐标。
01.geoadd将元素放入Geo集合中;


02.geopos从Geo集合获取指定成员的坐标;


03.georadius从集合Geo获取指定位置范围内的成员;


04.geodist计算指定两个元素的距离;


05.georadiusbymember命令与georadius命令非常相似,都可以用来找出位置指定范围内的成员。georadiusbymember命令的中心点是由Geo集合成员决定的,而georadius是由输入的位置决定的。

  • 当通过geoadd设置坐标时,这些坐标会被转换为一个52位的geohash。geohash是一个被广泛接受的地理坐标编码系统。Geo集合实际上被存储为一个有序集合,因此有序集合支持的所有命令都可以用于Geo数据类型。

Redis介绍、优点,缺点、数据类型:字符串、集合、列表、散列、有序集合、HLL、GEO操作相关推荐

  1. Python序列 数据类型 创建方式 Tuple元组 Str字符串 List列表 dict字典 Set集合 range,zip,map,enumerate

    Python 序列分类 数据类型 详细介绍 Python 主要数据类型: 元组Tuple, 字符串Str,列表List,字典Dict,集合Set 对比 元组Tuple 字符串Str 列表List 字典 ...

  2. 字符串、列表、元组、集合、字典综合对比

    一.概念 字符串string:一系列字符,使用引号来创建"" 列表list:一系列按特定顺序排列的元素组成,创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可[] 元组 ...

  3. 【数据结构笔记39】哈希表/散列表、(数据关键字/字符串关键字)散列构造函数

    本次笔记内容: 11.1.1 引子:散列的基本思路 11.1.2 什么是散列表 11.2.1 数据关键词的散列函数构造 11.2.2 字符串关键词的散列函数构造 文章目录 散列表背景 基本思想引出 已 ...

  4. 7-43 字符串关键字的散列映射 (25 分)(思路+详解+不懂的兄弟们来呀)兄弟们我干了5个小时,一个一个测试点过的

    一:题目 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位 ...

  5. 数据结构PTA 案例5-1.4 字符串关键字的散列映射

    案例5-1.4 字符串关键字的散列映射 题目 解法 题目 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位 ...

  6. 字符串关键字的散列映射

    7-14 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位:再用除留 ...

  7. 在线字符串哈希/散列加密工具

    在线字符串哈希/散列工具 在线字符串哈希/散列工 本工具可以获取多种散列方式的哈希值,如MD5,SHA1,SHA224,SHA256,SHA384,SHA512,HmacMD5,HmacSHA1等,基 ...

  8. Redis 6.2.6(NoSQL简介/redis介绍及安装/数据类型/配置文件)

    一.NoSQL简介 1.介绍 不仅仅是sql,泛指非关系型数据库. nosql不依赖业务逻辑方式存储,而以简单的key-value模式存储,因此大大的增加了数据库的扩展能力. 不遵徇sql标准 远超于 ...

  9. 77.redis介绍 安装 持久化 数据类型

    2019独角兽企业重金招聘Python工程师标准>>> 21.9 redis介绍 21.10 redis安装 21.11 redis持久化 21.12 redis数据类型 21.9 ...

  10. Python高级数据类型-字符串,列表,元组,字典

    0.序列 序列:在python中 序列就是一组按照顺序排列的值 python中三种内资的序列类型:字符串,列表,元组 优点:支持索引和切片的操作,从0开始 1.字符串 可以查询,修改 字符串常用的方法 ...

最新文章

  1. html 页面视图中的资源文件(css/js/image)的路径问题。
  2. php对接海康视频教程_EasyNVR无插件互联网直播平台对接海康摄像头如何通过SDK将视频在前端网页播放...
  3. SimpliciTI简介
  4. ElasticSearch原理
  5. Android-support-v4源码查看
  6. Android Studio(3)---Android Studio的配置
  7. java 读取mysql数据库_原生Java操作mysql数据库过程解析
  8. 山东大学操作系统课设
  9. 小巧实用的KMS激活工具 AAct特别版
  10. 软件质量管理-考试复习总结
  11. 【学习笔记】福州大学网络课程 网络空间安全概论(1,4)
  12. Pycharm 远程连接服务器(ssh)运行深度学习代码 | 详细步骤
  13. CSDN超实用的浏览器插件—去自家网站/搜索广告、超快捷万能搜索、各种实用小功能等诸多功能等你探索
  14. 对称加密算法基本介绍
  15. 这几款超好用的协同办公软件,你都get了吗
  16. STM32F103_study48_The punctual atoms(STM32 Serial communication experiment )
  17. 获取android应用缓存目录时遇到的问题
  18. PNG字幕文件自动生成工具
  19. 牵手腾讯视频,爱普生离年轻人更近了
  20. Java习题练习:幸运数

热门文章

  1. ​Interspeech 2022 | 探索非自回归跨语言语音合成中的音色解耦问题
  2. 软件测试周刊(第45期):一个人不该过分自省,这会使他变得软弱。
  3. 数独 九宫格 小学奥数
  4. 算法图解---狄杰斯特拉算法(原理+代码)
  5. vue 轻量级富文本vue-quill-editor
  6. 生产环境nsx-v升级为nsx-t的一些问题
  7. lldb 常用命令整理
  8. android studio导入classes.jar
  9. 思维导图制作工具有哪些?这些软件分享给大家
  10. html栅格系统显示边框,Bootstrap整体框架之CSS12栅格系统