简单易懂学编程:Redis的五种数据类型和操作,以及一些其他操作
![](https://pics3.baidu.com/feed/472309f790529822223ecd2f17d216cf0b46d4ee.jpeg?token=f273d953d5e881fc1d454973ca875db5&s=8D50608611DAADEF70E129090300B013)
我们已经学了很多的东西,今天我们来研究一下Redis是什么?它能做什么,以及它的五种类型是什么样的,以及它们的具体的使用场景。开发工具:IDLE (Python 3.7 64-bit或者32-bit) , pycharm(professional的版本), Ubuntu,xshell6(注:不需要3.7版本的也行,只需要Python3的版本都可以)1.什么是Redis
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server,该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
优势:Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。
适用的环境:
由于Redis在交换数据的优势,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大使得系统直接读取磁盘来获得数据的I/O慢的情况得到改善,更重要的是极大的提升访问的速度。将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。
![](https://pics5.baidu.com/feed/14ce36d3d539b6004d268fa82b48582ec75cb7e6.jpeg?token=23835d440936000c95fa58b814856e77&s=21E2F102CB2D3F3206F9D9020000F0C1)
未安装Redis的,可以在虚拟机中sudo apt-get update或者sudo apt-get install redis-server进行安装。
Redis的五种数据类型:字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(sorted sets)。键(key)有5中数据类型:string、list、set、zset(sorted set)、hash。值(value) :都是字符串类型的。
![](https://pics2.baidu.com/feed/b812c8fcc3cec3fd77d583771490b93b869427e1.jpeg?token=3bc10a52b53a873c9163aa22688ccb77&s=8560D302951C1E724671DD060000E0C1)
注意:键(key)是唯一的,不能设置一个相同的键(key) 不然现在设置的键(key)就会覆盖之前的那么键(key)。
查看过期时间(-1 表示永久 ; -2 表示 不存在)
![](https://pics4.baidu.com/feed/314e251f95cad1c8c9f0d4f9be260a0dc83d5145.jpeg?token=1589557f2ae59bf53b1f799408ee1658&s=8560D3028D0D1F724E701D0E000070C1)
为什么会有时间限制呢?行为的Redis是内存级的数据库,在内存中运行速度快,缺点就是容量小。一般操作Redis的时候我们不会直接使得Redis直接存在,我们会设置一个过期时间使得不让键一直占用内存容量。
给已经存在 key,设置过期时间,即使再使用get name它也只会返回一个空(nil)。
![](https://pics1.baidu.com/feed/6a600c338744ebf86f90f93718e1ba2e6159a7f6.jpeg?token=9b6544641bfb474e3064a1a910f0c193&s=0560D302D3F497DA4C7C6C07020070C1)
设置 键(key)的同时,设置过期时间。
![](https://pics0.baidu.com/feed/d31b0ef41bd5ad6ea8b162e140d354dfb6fd3c09.jpeg?token=26e00a4b01aa6776e45bf23e719e4579&s=C57033C253F4B3DE4E5DF40B0000E0C1)
注意:尽量不要写中文,因为中文会导致乱码,或者显示的时候以二进制显示。
![](https://pics1.baidu.com/feed/71cf3bc79f3df8dc665f644e0d091f8f461028a8.jpeg?token=7c79aa7ffdae1e717612ab8848b249d1&s=457013C2D7E0B75904D9440F020070C2)
给已有的value,再添加新的值。append key value,redis 里面所有的 value,都是字符串类型的。
![](https://pics6.baidu.com/feed/1b4c510fd9f9d72ae2eebbd516324530359bbb09.jpeg?token=841c5f3d4ddffd280bd6e4b9f1a687fe&s=E561B342CFECB77046796C030000B0C0)
键(key)的操作。
![](https://pics6.baidu.com/feed/e7cd7b899e510fb356161fa91a2ba591d1430c99.jpeg?token=b1e9d4b6fb704714cf9a3557d0e3fe79&s=85707382B7FC9E704EF9450D0200A0C2)
del key:删除一个键(key)。
exists key:查看key是否存在 ,存在返回 1, 不存在返回 0。
type key:查看键(key)的类型。
![](https://pics7.baidu.com/feed/908fa0ec08fa513d59b9dc17fd7538ffb3fbd981.jpeg?token=95164bd23c33785d1116c3f1976fa09d&s=E57013C2DBE4B659045D4C0F000070C2)
2.list
lpush:左添加(栈)。rpush:右添加 (队列)。
![](https://pics5.baidu.com/feed/a8014c086e061d951b8ce316baec67d563d9caf7.jpeg?token=f45c535eb4760860db5a09a6e55ceffd&s=C1609342EBE49B490CED950D000070C0)
![](https://pics2.baidu.com/feed/00e93901213fb80ecf01c94af6c9422ab838947c.jpeg?token=2ba4d146e1e1aee6d6e28320beebbd7e&s=45609342DFE0965104D9F50E0200E0C0)
![](https://pics1.baidu.com/feed/e1fe9925bc315c60531f59664da9a61748547749.jpeg?token=bca0d2e88a074f6b81a1bb209823abe4&s=C161934253E4B74956C9FD0B0000F0C1)
我们查看lrange my_list 0 -1的时候,输出的顺序就是 d c b a,用rpop my_list 是删除的右边第一个即是:a.
我们查看lrange my_rlist 0 -1的时候,输出的顺序就是 a b c d,用rpop my_list 是删除的左边第一个即是:a.
![](https://pics0.baidu.com/feed/b03533fa828ba61eb01c9646802cfa0e314e5981.jpeg?token=96e241310030b0b940164b2ea41484e4&s=4D618342CBE4BB784670BC07000030C2)
![](https://pics2.baidu.com/feed/b7003af33a87e9508241bfc9d1203e47faf2b4da.jpeg?token=0747b4f610a28d09f713474ef39b99ab&s=4961934253B5B26D10F8CD0B0000F0C1)
lrem test_list 2 a : count > 0 从左往右 删除数量为count的value。从上往下删除。
![](https://pics7.baidu.com/feed/810a19d8bc3eb135c4830be66706c5d7fc1f44c0.jpeg?token=663993af7d45b66108eb2f488ce015cd&s=69418342D3B4B27F1CF1C50F0000E0C0)
lrem test_list 0 a : count = 0 删除所有的 value。当等于0 的时候将删除表内所有的指定值。
![](https://pics4.baidu.com/feed/d058ccbf6c81800ae9d53177702d5efe828b47b0.jpeg?token=21fa5f427b19cc385d4159d31f42b3a3&s=496193429BB4B25F1CE15C0F0000E0C2)
lrem test_list -1 b : count < 0 从右往左 删除数量为count的value。当小于0的时候从下往上删除。3.hash(类似于字典)
user { name:jianeng} user相当于键(key),{ name:jianeng}相当于值(value)。
![](https://pics5.baidu.com/feed/cc11728b4710b912a22eede500e59107934522de.jpeg?token=c8e7f3525c471612d896c996301b4ec0&s=C561B342BBACBF705C59CC0B0000E0C1)
hset user name dayekeji :定义一个hash。hget user name : 获取值。
![](https://pics3.baidu.com/feed/64380cd7912397dd9909abd3999adfb3d1a28795.jpeg?token=3a08763e412531107cec6cb889461413&s=8570538253E4B35B5CED44070000F0C1)
设置多个:user{name:dayekeji , age:25, sex:male }。
![](https://pics6.baidu.com/feed/5882b2b7d0a20cf4e923a0a1b7112632acaf993e.jpeg?token=ab65033b36f4b7363baaa8ce3523087b&s=41609342C3B4B6694449200C0000F0C2)
4.集合(set):sadd key value [value] 唯一性,无序性。
![](https://pics1.baidu.com/feed/bd3eb13533fa828b9197e4b03d072c30960a5acd.jpeg?token=5c2ae2d0308efc7b213c62bd83912ff2&s=C9619342EBF08E4958D025060000B0C2)
删除srem 指定删除:srem key member。spop随机删除 :spop key。随机选择一个移除。
![](https://pics5.baidu.com/feed/29381f30e924b899db5d308aaf1e70910a7bf638.jpeg?token=beb3d22d1d80c9c77cf104940b385ba6&s=ED60B34213A5B34D4E754C1F0000A0C2)
![](https://pics4.baidu.com/feed/060828381f30e9247e6e8f098e1003021c95f7d9.jpeg?token=de8865668e5a8f56267d287c1d327313&s=ED60934253A4834B1CD9B51B0000A0C3)
移动一个集合的值到另一个集合,smove my_set my_set2 z,将my_set中的z移动到my_set2中去。
![](https://pics4.baidu.com/feed/a2cc7cd98d1001e9d11644cd791616e855e797e3.jpeg?token=6e48a9912882d7d50d813a6f26625c4a&s=4161BB425BA5B35B1EC5650D000030C0)
![](https://pics2.baidu.com/feed/8601a18b87d6277fe04e6cf5e8207234e824fcb8.jpeg?token=335cb47b7d155d9b3dd70fbf59f331a6&s=4D619342B3E493681CF1DD0F0000F0C1)
并集
![](https://pics3.baidu.com/feed/18d8bc3eb13533fa364d682c68cb901b40345bd2.jpeg?token=d35409113e2a0cee78b684db2ab7fe6f&s=CD608342DBE09F680A6C950D0000E0C3)
![](https://pics0.baidu.com/feed/34fae6cd7b899e51e020c69f82bfb437c9950da8.jpeg?token=214463db466a9b1aeeda1c25875a79a4&s=C1619342C3E0B36814C5F404000070C3)
差集
![](https://pics7.baidu.com/feed/a2cc7cd98d1001e9a4df90fc781616e855e7977b.jpeg?token=126e5cee7777c1ac6386c840c89a4cac&s=477113C2DBE4974B1CE1D10B000070C1)
![](https://pics5.baidu.com/feed/91ef76c6a7efce1b1d1c26e16a499edab48f6587.jpeg?token=58c4eaf2efd1b0508394dd29b629e941&s=2560D302890D0B700E79740E020030C1)
scard my_set :获取集合个数。
srandmember my_set : 随机返回一个。
5.zset(有序集合)
![](https://pics4.baidu.com/feed/503d269759ee3d6dd50a36c0800e00264e4ade8e.jpeg?token=306281585c67e0f50697eeae37f3c2fc&s=C561934253B4B2790ECDFC0E000070C1)
![](https://pics7.baidu.com/feed/d52a2834349b033b968d93abd4d65bd7d539bd53.jpeg?token=7da9654da93805d468ca8a1e3aa5be21&s=49619342C3F09E680ACCB504000030C0)
zadd my_zset 1 'one' : 可以添加删去的值。
![](https://pics4.baidu.com/feed/503d269759ee3d6d68cf7ba0820e00264f4ade69.jpeg?token=8f82501811a54aa70108777de3726f88&s=C17113C2CBAC925914CDC40C0000E0C1)
![](https://pics7.baidu.com/feed/8644ebf81a4c510f56b44696a0414829d52aa5e3.jpeg?token=3d251b33e01754d8d06046f6d8b0662c&s=437113C2C3B0B2711649448C020030C0)
![](https://pics4.baidu.com/feed/3b87e950352ac65c2bc5a4373aeadf1592138a4b.jpeg?token=df9f4cb7966be4d1a1273f5adc9a5bd8&s=49619342D3B4B26902D8090B0000A0C0)
![](https://pics5.baidu.com/feed/4afbfbedab64034f04d8bbe76fdb14350b551dd2.jpeg?token=49f7c23b8eb194078bebef67a2aaf13d&s=4161B34253B492780EC14D0F0000E0C0)
都只能在正向索引范围内进行,反向索引不可以。dedis:定阅(subscribe)和发布(pubulish)。
![](https://pics4.baidu.com/feed/fc1f4134970a304eec922b1a13d0ca82c8175cbf.jpeg?token=8d7fa85c91f36b56f1bb31f074954423&s=05707382CBA48F705E75DC050200F0C1)
![](https://pics2.baidu.com/feed/6f061d950a7b0208d6eb4964a7c19fd7572cc836.jpeg?token=6b203265927bcd9377e3fd300263c9d8&s=15705382898C3F700E41C8030200E0C2)
![](https://pics3.baidu.com/feed/8718367adab44aed988ca6260c04ea05a38bfbcb.jpeg?token=952a59a406650a1c00cd4eac0ea8f01c&s=05717382BBE0BB780CDCED07000070C0)
接收到一个message是由dayekeji发出的,内容是hello world。进入redis中以后,想要退出输入quit就可以退出了。
好了今天就和大家分享到这吧!今天 的内容偏向于操作,都不是很难,redis最常用的操作基本小编都已经给大家示范了一遍。大家要记得自己多练习一下,大家加油!