-------------------Redis基本数据类型-------------------
1、String 字符串
1、概念
1、String 是redis最基本的类型,value 不仅可以是 String,也可以是数字;使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式);string类型是二进制安全的。意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象;string类型是Redis最基本的数据类型,一个键最大能存储512MB。
2、命令
1、set:设置key对应的值为string类型的value。
>set "name" "hello"
2、setnx(set if not exists):将key设置值为value,如果key不存在,这种情况下等同set命名;当key值存在,什么也不做。
>setnx "name" "hello"
3、setex:设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。
>setex "color" 10 "red"
>get "color" --- red
十秒过后
>get "color" --- (nil)
4、setrange:覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。
>set "email" "redis@126.com" --- "ok"
>setrange "email" 6 "gmail.com" --- (integer) 14
>get "email" --- redis@gmail.com
5、mset:一次设置多个值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
>mset "key1" "python" "key2" "c++" --- "ok"
>get "key1" --- "hello"
>get "key2" --- "world"
6、mget:一次获取多个key的值,如果对应key不存在,则对应返回nil。
>mget "key1" "key2" "key3"
7、msetnx:对应给定的keys到他们相应的values上。只要有一个key已经存在,msetnx一个操作也不会执行。
>msetnx "key1" "hello" "key2" "world" --- (integer) 0
8、getset:设置key的值,并返回key的旧值。
>get "name" --- "hello"
>getset "name" "newName" --- "hello"
>get "name" --- "newName"
9、getrange key start end:获取指定key的value值的字符串。是由start和end的位移决定的。
>get "name" --- "newName"
>getrange "name" 1 3 --- "ewN"
10、incr 对key的值加1 操作
>set "age" 18 --- "ok"
>incr "age" --- (integer) 19
>get "age" ---"19"
11、incrby:用incr类似,加指定值,key不存在的时候会设置key,并认为原来的value值为0。
>incrby age 5 ---(integer) 24
>incrby age1111 5 --- (integer) 5
>get age1111 --- "5"
12、decr:对key的值做的事渐减操作,decr一个不存在key,则设置key为1.
>get age --- "24"
>decr age --- "23"
13、decrby:同decr,减指定值,key不存在的时候会设置key,并认为原来的value值为1.
>get age --- "23"
>decrby age 10 --- "13"
14、append:给指定key的字符串值追加value,返回新字符串值的长度。例如我们向name的值追加一个"redis"字符串:
>set "name" "value" --- OK
>append "name" "_newValue" --- (integer) 14
>get "name" ---"value_newValue"
2、Hash 哈希
1、概念:
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象;Redis中每个hash可以存储2的32次方-1个键值对(40多亿)
2、命令:
1、hset:设置指定的hash field1。
>hset "myhash" "field1" "hello" --- (integer) 1
2、hsetnx:只在key指定的哈希集中不存在的字段时,设置字段的值。如果key指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段已存在,该操作无效果。
>hsetnx "myhash" "field1" "hello"。 --- (integer) 1
3、hmset:同时设置hash多个field。
>hmset "myhash" "field1" "hello" "field2" "world" ---OK
4、hget:获取指定的hash值的field。
>hget "myhash" "field1" --- "hello"
5、hgetall:获取所有的hash值的数据。
>hgetall "myhash" ---
1) "field1"
2) "hello"
3) "field2"
4) "world"
6、hmget:获取hash值的多个field值。
>hmget "myhash" "field1" "field2" "field3" ---
1) "hello"
2) "world"
3) (nil)
7、hincrby:指定的hash field值,加上给定的值。
>hset "myhash" "field3" "0" --- (integer) 1
>hincrby "myhash" "field3" 1 --- (integer) 1
>hincrby "myhash" "field3" -8 --- (integer) -7
8、hexists:测试指定field是否存在。
>hexists "myhash" "field1" --- (integer) 1
>hexists "myhash" "field9" --- (integer) 0
9、hkeys:查看指定哈希中所有的key值。
>hkeys "myhash" ---
1) "field1"
2) "field2"
3) "field3"
10、hdel:从key指定的哈希集中移除指定的域。
>hdel "myhash" "field1" --- (integer) 1
11、hlen:返回指定hash的field数量。
>hlen "myhash" --- (integer) 2
12、hvals:返回指定hash中所有的value值。
>hvals "myhash" ---
1) "world"
2) "-7"
3、List 列表
1、概念:
列表类型可以存储一个有序的字符串列表,常用的操作时向列表两端添加元素,或者获得列表的某一个片段;列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(I),获取越接近两端的元素,速度就越快。
2、命令:
1、lpush:从左边向list列表中插入数据。
>lpush "mylist" "100001"
>lpush "mylist" "100002"
>lpush "mylist" "100003" "100004"
2、rpush:从右边向list列表中插入数据。
>rpush "mylist" "100005"
>rpush "mylist" "100006"
3、lpop:从列表左侧将数据弹出。
>lpop "mylist" --- "100004"
4、rpop:从列表右侧将数据弹出。
>rpop "mylist" --- "100006"
5、llen:获取列表中元素的个数。
>llen "mylist":--- (integer) 4
6、lrange key start stpo:返回索引从start到stop之间的所有元素(包含两端元素)。
>lrange "mylist" 0 -1 ---
1) "100003"
2) "100002"
3) "100001"
4) "100005"
7、lrem key count value:删除列表中前count个值为value的元素,返回删除的个数
1、count>0时 lrem 命令从列表左边开始删除前count个值为value的元素。
2、count<0时 lrem命令从列表右边开始删除前count个值为value的元素。
3、count=0时 lrem命令会删除所有值为value的元素。
>lpush "mylist" 2 2 2 --- (integer) 7
>rpush "mylist" 2 2 --- (integer) 10
>lrem "mylist" 1 2 --- (integer) 1
>lrem "mylist" -2 2 --- (integer) 2
>lrem "mylist" 0 2 --- (integer) 2
8、lindex key index:根据索引下标获取指定的列表元素。
>lindex "mylist" 1 --- "100002"
9、ltrim key start end:可以删除指定索引范围之外的所有元素,其指定列表范围的方法和lrange命令相同。
>ltrim "mylist" 0 -2 --- OK
10、linsert key before|after privot value:首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before还是after来决定将value插入到该元素的前面还是后面,返回插入后列表元素的个数
>lrange "mylist" 0 -1 ---
1) "100003"
2) "100002"
3) "100001"
4) "100005"
>linsert "mylist" before "100003" "3"
>linsert "mylist" after "100003" "4"
1) "3"
2) "100003"
3) "4"
4) "100002"
11、rpoplpush source destination:将元素从一个列表转到另一个列表。
>rpoplpush "mylist" "mylistnew" --- "100002"
>lrange "mylistnew" 0 -1
1) "100002"
4、Set 集合
1、概念:
在集合中的每个元素都是不同的,且没有顺序。一个集合类型(set)键可以存储至多2的32次-1个字符串。集合类型的常用操作时向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表(hash table)实现,所以这些操作的时间复杂度都是O(I)。最方便的是多个集合类型键之间还可以进行并集、交集、差集运算。
2、集合与列表的区别:
列表具有有序性,集合具有唯一性。
2、命令:
1、sadd:用来向集合中添加一个或多个元素,如果键不存在则会自动创建。因为在一个集合中不能有相同的元素,所以如果要加入的元素已经存在于集合中聚会忽略这个元素。
>sadd letters a ---
>sadd letters a b c ---
2、smembers key:命令会返回集合中的所有元素
>smembers letters
3、sismember key member:判断一个元素是否在集合中是一个时间复杂度为O(I)的操作,无论集合中有多少个元素,sismember命令始终可以极快的返回结果。当值存在是sismembers 命令返回1 ,当值不存在或键不存在是返回0
>sismember letters a
>sismember letters d
4、集合间运算
1、sdiff key:对多个集合执行差集运算。
>sadd setA 1 2 3
>sadd setB 2 3 4
>sdiff setA setB
>sdiff SetB setA
2、sinter key:对多个集合执行交集运算。
>sinter setA setB
3、sunion key:对多个集合执行并集运算。
>sunion setA setB
5、scard key:获取集合中元素个数。
>smembers letters
>scard letters
6、spop letters:从集合中弹出一个元素。
>spop letters
>smembers letters
5、zset(Sorted set:有序集合)
1、概念:
在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入,删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素,获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素不同,但是他们的分数可以相同。
2、有序集合与列表比较:
1、相似处:
1、二者都是有序的。
2、二者都可以获得某一范围的元素。
2、区别:
1、列表类型是通过链表实现,获取靠近两端的数据速度快,当元素增加后,访问中间数据的速度会变慢。
2、有序集合类型是使用散列和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度O(log(N)))。
3、列表中不能简单的调整某个元素的位置,但是有序集合可以
4、有序集合要比列表类型更消耗内存。
2、命令:
1、zadd:用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用心的分数替换原来的分数。zadd命令的返回值是新加入到集合中的元素的个数。
>zadd scoreboard 89 Tom 67 Peter 100 David --- (integer) 3
注:分数不仅是整数,还支持双精度浮点数.
2、zscore key member:获取元素的分数
>zscore scoreboard Tom --- "89"
3、zrange key start top:按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素
>zrange scoreboard 0 -1
1) "Peter"
2) "Tom"
3) "David"
4、zrevrange key start top:按照元素分数从大到小的顺序放回索引从start到stop之间的所有元素
>zrevrange scoreboard 0 -1
1) "David"
2) "Tom"
3) "Peter"
5、zrangebyscore key min max:按照元素分数从小到大的顺序返回分数在min和max之间的元素。
>zrangebyscore scoreboard 85 100
1) "Tom"
2) "David"
6、zincrby key increment member:增加一个元素的分数,返回值是更改后的分数。
>zincrby scoreboard 4 Tom --- "93"
- Redis常用数据类型介绍、使用场景及其操作命令
Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...
- Redis笔记(三)Redis的数据类型
前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数 ...
- Redis常用数据类型
Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html Redis最为常用的数据类型主要有以下五种: ●Str ...
- Redis常用数据类型和事物以及并发
Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...
- Redis五大数据类型的常用操作
在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...
- redis的数据类型及使用
Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) st ...
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- 一、Redis的数据类型
一Redis的数据类型 string:字符串 hash:哈希 list:列表 set:集合 zset:有序集合(sorted set) 1.string(字符串) redis最基本的类型.可以理解成与 ...
- Redis的数据类型及其常用命令
快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...
随机推荐
- 初学安卓开发随笔之 Menu、toast 用法、活动的四种启动模式 以及 一个方便的Base活动类使用方法
Toast toast 是安卓系统的一种非常棒的提醒方式 首先定义一个弹出Toast的触发点,比如可以是按钮之类 其中 Toast.LENGTH_SHORT是指显示时长 还有一个内置变量为Toast. ...
- [javascript] visible - 待写
摘要 jquery 有个筛选器 visible , 一般用于选择 可见元素 $('p:visible') 就是选择可见的 p 元素. 但发现有时候不可用.!!
- 浅析python 的import 模块(转)
摘要: 学习python有几天了,对import一直不是很清楚,和C里面的include是否一样,重复引入有问题么?搜索路径是怎样的?整理解决下我的疑问. 一 模块的搜索路径 模块的搜索路径都放在了s ...
- Hadoop常用命令集合
查看安全模式 bin/hadoop dfsadmin -safemode enter | leave | get | wait
- yii2 request文件简介
1. 在yii2项目中经常用到下面这些方法: 方法 解释 Yii::$app->request->get($key,$defaultValue) GET方式获取key的值,若key空,则k ...
- css鼠标样式cursor
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Redis-简单实现星形主从配置
高级参考(https://www.zhihu.com/question/21419897) 简单应用场景 现在配置redis 星形 集群, 有三台服务器, 怎样实现? 复制redis.conf两份, ...
- java中链接数据库的具体操作以及pstmt.setObject(i+1, objects[i])这行代码的意思
package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStat ...
- Hibernate中HQL函数汇总及获取当前时间进行比较举例
在很多时候,我们负责的项目中,在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,通常的原因是:我们使用了标准的sql语句,开启的确是hiberna ...
- SO_REUSEADDR与SO_REUSEPORT平台差异性与测试
前些天,与另外一个项目组的同事聊天的时候,谈到他遇到的一个有意思的BUG.在window上启动服务器,然后客户端连接的时候收到一些奇怪的消息,查证了,原来是他自己的另一个工具也在相同的地址上监听,客户 ...