以下简摘抄至redis官网教程
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Linux下安装
地址:https://www.redis.net.cn/download
Windows下安装
地址:https://github.com/MicrosoftArchive/redis/releases
打开cdm窗口,切换到redis文件夹路径,输入:
redis-server.exe redis.windows.conf
出现以下界面代表启动成功,默认端口号是6379
,所以要保证6379
端口没有被占用。
另外打开一个cmd窗口,之前那个窗口不能关闭,否则不能运行
切换到redis路径。输入
.\redis-cli.exe -h 127.0.0.1 -p 6379
DEL key
该命令用于在 key 存在时删除 key。EXISTS key
检查给定 key 是否存在。127.0.0.1:6379> set user "id=1"
OK
127.0.0.1:6379> exists user
(integer) 1
127.0.0.1:6379> del user
(integer) 1
127.0.0.1:6379> exists user
(integer) 0
DUMP key
序列化给定 key ,并返回被序列化的值。EXPIRE key seconds
为给定 key 设置过期时间,以秒计。127.0.0.1:6379> set name "tom"
OK
127.0.0.1:6379> expire name 3 //设置3S之后过期
(integer) 1
127.0.0.1:6379> exists name //3s之后
(integer) 0
EXPIREAT key timestamp EXPIREAT
的作用和 EXPIRE 类似,都用于为 key 设置过期时间。不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
PEXPIRE key milliseconds
设置 key 的过期时间以毫秒计。
PEXPIREAT key milliseconds-timestamp
设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
KEYS pattern
查找所有符合给定模式( pattern)的 key 。
MOVE key db
将当前数据库的 key 移动到给定的数据库 db 当中。
PERSIST key
移除 key 的过期时间,key 将持久保持。
PTTL key
以毫秒为单位返回 key 的剩余的过期时间。
TTL key
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
RANDOMKEY
从当前数据库中随机返回一个 key 。
RENAME key newkey
修改 key 的名称
RENAMENX key newkey
仅当 newkey 不存在时,将 key 改名为 newkey 。
TYPE key
返回 key 所储存的值的类型。
127.0.0.1:6379> set name "tom"
OK
127.0.0.1:6379> type name
string
SET key value
此命令用于设置指定键的值。GET key
此命令用于检索键的值。127.0.0.1:6379> set name "Vijar Wang"
OK
127.0.0.1:6379> get name
"Vijar Wang"
GETRANGE key start end
此命令用于获取存储在键中的字符串的子字符串。127.0.0.1:6379> getrange name 1 2
"ij"
127.0.0.1:6379>
GETSET key value
此命令用于设置键的字符串值并返回其旧值。127.0.0.1:6379> GETSET name Vijar
"Vijar"
127.0.0.1:6379> get name
"Vijar"
MGET key1 [key2 ..]
此命令用于获取所有给定键的值127.0.0.1:6379> MGET name student
1) "Vijar"
2) "TOM"
SETEX key secodes value
此命令用于设置key到期时的值(以秒为单位)127.0.0.1:6379> setex name 5 OUYANG
OK
127.0.0.1:6379> get name
"OUYANG"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>
SETNX key value
仅当key不存在时,此命令用于设置key的值返回1.如果已经存在则返回0,且该key不做任何改变,127.0.0.1:6379> setnx name "Vijar Wang"
(integer) 1
127.0.0.1:6379> get name
"Vijar Wang"
127.0.0.1:6379> setnx name "Wang"
(integer) 0
127.0.0.1:6379> get name
"Vijar Wang"
STRLEN key
此命令用于检索存储在key中的值的长度127.0.0.1:6379> get name
"Vijar Wang"
127.0.0.1:6379> strlen name
(integer) 10
MSET key value [key value …]
此命令用于将多个键设置为多个值127.0.0.1:6379> mset student1 tom student2 peter
OK
127.0.0.1:6379> mget student1 student2
1) "tom"
2) "peter"
MSETNX key value [key value …]
仅当没有任何键存在时,此命令用于将多个键设置为多个值PSETEX key milliseconds value
此命令用于设置key的值和到期时间(以毫秒为单位)INCR key
此命令用于将键的整数值递增1127.0.0.1:6379> set key 1
OK
127.0.0.1:6379> get key
"1"
127.0.0.1:6379> incr key
(integer) 2
127.0.0.1:6379> get key
"2"
如果key中的值为字符串,则会报异常信息。
127.0.0.1:6379> set key name1
OK
127.0.0.1:6379> get key
"name1"
127.0.0.1:6379> incr key
(error) ERR value is not an integer or out of range
INCRBY key increment
此命令用于按给定量递增键的整数值127.0.0.1:6379> set key 1
OK
127.0.0.1:6379> get key
"1"
127.0.0.1:6379> incrby key 2
(integer) 3
127.0.0.1:6379> get key
"3"
INCRBYFLOAT key increment
此命令用于按给定的量增加键的浮点值DECR key
此命令用于将键的整数值递减1DECRBY key decrement
此命令用于按给定数量递减键的整数APPEND key value
此命令用于将值附加到键 (在值后面拼接)Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。每个哈希键中可以存储多达40亿个字段值对。
127.0.0.1:6379> HMSET employee:1 name jobNumber phone sex birthday 200
OK
127.0.0.1:6379> HMSET employee:1 name jobNumber phone sex birthday
(error) ERR wrong number of arguments for HMSET
127.0.0.1:6379> HMSET employee:1 name jobNumber phone sex birthday
(error) ERR wrong number of arguments for HMSET
127.0.0.1:6379> HMSET employee:1 name jobNumber phone sex birthday 1
OK
注意:存储时以键值对形式保存,如果有一个只设置了键但没设置值则会报出异常。
HDEL key field2[field2]
删除一个或多个哈希字段127.0.0.1:6379> HGETALL user:1
1) "username"
2) "ajeet"
3) "password"
4) "javatpoint"
5) "alexa"
6) "2000"
127.0.0.1:6379> HDEL user:1 alexa
(integer) 1
127.0.0.1:6379> HGETALL user:1
1) "username"
2) "ajeet"
3) "password"
4) "javatpoint"
HEXISTS key field
确定是否存在哈希字段。127.0.0.1:6379> hexists user:1 username
(integer) 1
127.0.0.1:6379> hexists user:1 name
(integer) 0
HGET key field
获取存储在指定键中的哈希字段的值。127.0.0.1:6379> HGET user:1 username
"ajeet"
HINCRBY key field increment
按给定数字递增散列字段的整数值127.0.0.1:6379> HGET user1: age
"21"
127.0.0.1:6379> HINCRBY user1: age 3
(integer) 24
HINCRBYFLOAT key field increment
将散列字段的浮点值递增给定量HKEYS key
获取哈希中的所有字段127.0.0.1:6379> hkeys user:1
1) "username"
2) "password"
HLEN key
获取散列中的字段数127.0.0.1:6379> hlen user:1
(integer) 2
HMGET key1 [field2]
获取所有给定哈希字段的值127.0.0.1:6379> hmget user:1 password
1) "javatpoint"
HMSET key field1 value1 [field2 value2]
将多个哈希字段设置为多个值127.0.0.1:6379> hmset user name "TOM" age 19 no 1
OK
HSET key field
设置哈希字段的字符串值127.0.0.1:6379> hset user phone 123456
(integer) 1
127.0.0.1:6379> hget user phone
"123456"
HSETNX key field
仅当字段不存在时,设置哈希字段的值,存在则返回0127.0.0.1:6379> hget user phone
"123456"
127.0.0.1:6379> HSETNX user phone 157175
(integer) 0
127.0.0.1:6379> hget user phone
"123456"
127.0.0.1:6379> HSETNX user birthday "2001-10-1"
(integer) 1
127.0.0.1:6379> hget user birthday
"2001-10-1"
HVALS key
获取哈希值中的所有值127.0.0.1:6379> hvals user
1) "TOM"
2) "19"
3) "1"
4) "123456"
5) "2001-10-1"
Redis列表是按插入顺序排序的字符串列表。可以在列表的头部(左边)或尾部(右边)添加元素。
LPUSH key value1 [value2]
将一个或多个值添加到列表中。127.0.0.1:6379> lpush javatpoint sql java ajax jquery
(integer) 5
BLPOP key1 [key2] timeout
删除和获取列表中的第一个元素,或阻塞直到一个元素可用。127.0.0.1:6379> lrange javatpoint 1 5
1) "java"
2) "sql"
3) "sql"
127.0.0.1:6379> blpop javatpoint 12
1) "javatpoint"
2) "mysql"
127.0.0.1:6379> lrange javatpoint 1 5
1) "sql"
2) "sql"
BRPOP key1 [key2] timeout
删除和获取列表中的最后一个元素,或阻塞直到一个元素可用。127.0.0.1:6379> lrange javatpoint 1 6
1) "mysql"
2) "java"
3) "sql"
4) "sql"
127.0.0.1:6379> brpop javatpoint 200
1) "javatpoint"
2) "sql"
127.0.0.1:6379> lrange javatpoint 1 6
1) "mysql"
2) "java"
3) "sql"
LINDEX key index
通过索引从列表中获取元素。(索引从1开始)127.0.0.1:6379> lindex javatpoint 1
"mysql"
LINSERT key before|after pivot value
在列表中的另一个元素之前或之后插入元素。SADD
向集合添加一个或多个成员127.0.0.1:6379> SADD myset "Hello" "World"
(integer) 2
127.0.0.1:6379> SMEMBERS myset
1) "Hello"
2) "World"
SCARD
获取集合的成员数127.0.0.1:6379> SCARD myset
(integer) 2
SDIFF
返回给定所有集合的差集127.0.0.1:6379> SMEMBERS myset
1) "Hello"
2) "World"
127.0.0.1:6379> SMEMBERS yourset
1) "Hello"
2) "Master"
127.0.0.1:6379> SDIFF myset yourset
1) "World"
SDIFFSTORE
返回给定所有集合的差集并存储在 destination 中127.0.0.1:6379> SDIFFSTORE diff myset yourset
(integer) 1
127.0.0.1:6379> SMEMBERS diff
1) "World"
SINTER
返回给定所有集合的交集127.0.0.1:6379> SINTER myset yourset
1) "Hello"
SINTERSTORE
返回给定所有集合的交集并存储在 destination 中127.0.0.1:6379> SINTERSTORE sinters myset yourset
(integer) 1
127.0.0.1:6379> SMEMBERS sinters
1) "Hello"
SISMEMBER
判断 member 元素是否是集合 key 的成员127.0.0.1:6379> SISMEMBER myset Hello
(integer) 1
127.0.0.1:6379> SISMEMBER myset TOM
(integer) 0
SMEMBERS
返回集合中的所有成员SMOVE
将 member 元素从 source 集合移动到 destination 集合127.0.0.1:6379> SMEMBERS myset
1) "Hello"
2) "World"
127.0.0.1:6379> SMOVE myset otherset "Hello"
(integer) 1
127.0.0.1:6379> SMEMBERS otherset
1) "Hello"
SPOP
移除并返回集合中的一个随机元素127.0.0.1:6379> SMEMBERS myset
1) "two"
2) "World"
3) "one"
127.0.0.1:6379> spop myset
"one"
127.0.0.1:6379> SMEMBERS myset
1) "two"
2) "World"
SRANDMEMBER
返回集合中一个或多个随机数127.0.0.1:6379> SMEMBERS myset
1) "two"
2) "World"
127.0.0.1:6379> SRANDMEMBER myset
"World"
127.0.0.1:6379> SMEMBERS myset
1) "two"
2) "World"
SREM
移除集合中一个或多个成员127.0.0.1:6379> SMEMBERS myset
1) "three"
2) "two"
3) "World"
4) "one"
5) "four"
127.0.0.1:6379> srem myset four
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "two"
2) "World"
3) "one"
4) "three"
SUNION
返回所有给定集合的并集127.0.0.1:6379> SMEMBERS myset
1) "two"
2) "World"
3) "one"
4) "three"
127.0.0.1:6379> SMEMBERS yourset
1) "Hello"
2) "Master"
127.0.0.1:6379> SUNION myset yourset
1) "World"
2) "two"
3) "one"
4) "three"
5) "Hello"
6) "Master"
SUNIONSTORE
所有给定集合的并集存储在 destination 集合中SSCAN
迭代集合中的元素SSCAN key cursor [MATCH pattern] [COUNT count]
cursor - 游标。
pattern - 匹配的模式。
count - 指定从数据集里返回多少元素,默认值为 10 。
> SADD myset1 "Google"
(integer) 1
> SADD myset1 "Redis"
(integer) 1
> SADD myset1 "Taobao"
(integer) 1
> SSCAN myset1 0 match R*
1) "0"
2) 1) "Redis"
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数 ( score ) 却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 – 1 ( 4294967295 ) , 每个集合可存储 40 多亿个成员。
ZADD
向有序集合添加一个或多个成员,或者更新已存在成员的分数127.0.0.1:6379> ZADD comcn 1 redis
(integer) 1
127.0.0.1:6379> ZADD comcn 2 cassandra 3 cassandra
(integer) 1
127.0.0.1:6379> ZRANGE comcn 0 10 WITHSCORES
1) "redis"
2) "1"
3) "cassandra"
4) "3"
127.0.0.1:6379>
ZCARD
获取有序集合的成员数ZADD key [NX|XX] [CH] [INCR] score member [score member …]
添加单个元素 redis> ZADD page_rank 10 google.com (integer) 1
127.0.0.1:6379> ZADD comcn 1 redis //添加一个元素
(integer) 1
127.0.0.1:6379> ZADD comcn 2 cassandra 3 cassandra
(integer) 1
127.0.0.1:6379> ZRANGE comcn 0 10 WITHSCORES
1) "redis"
2) "1"
3) "cassandra"
4) "3"
ZCOUNT
计算在有序集合中指定区间分数的成员数127.0.0.1:6379> zadd myset 1 "one" 2 "two" 3 "three"
(integer) 3
127.0.0.1:6379> zcount myset -inf +inf
(integer) 3
127.0.0.1:6379> zcount myset (1 3
(integer) 2
ZINCRBY
有序集合中对指定成员的分数加上增量 incrementZINTERSTORE
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中ZLEXCOUNT
在有序集合中计算指定字典区间内成员数量ZRANGE
通过索引区间返回有序集合成指定区间内的成员127.0.0.1:6379> zrange myset 0 10
1) "one"
2) "two"
3) "three"
ZRANGEBYLEX
通过字典区间返回有序集合的成员ZRANGEBYSCORE
通过分数返回有序集合指定区间内的成员ZRANK
返回有序集合中指定成员的索引ZREM
移除有序集合中的一个或多个成员ZREMRANGEBYLEX
移除有序集合中给定的字典区间的所有成员ZREMRANGEBYRANK
移除有序集合中给定的排名区间的所有成员ZREMRANGEBYSCORE
移除有序集合中给定的分数区间的所有成员ZREVRANGE
返回有序集中指定区间内的成员,通过索引,分数从高到底ZREVRANGEBYSCORE
返回有序集中指定分数区间内的成员,分数从高到低排序ZREVRANK
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序ZSCORE
返回有序集中,成员的分数值ZUNIONSTORE
计算一个或多个有序集的并集,并存储在新的 key 中ZSCAN
迭代有序集合中的元素(包括元素成员和元素分值)