Redis 简介REmote DIctionary Server(Redis)
是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
启动redis: redis-server.exe conf/redis-6379.conf
数据类型:hash, string, list, set, nil, sortedset /zset
操作指令
string类型指令
添加修改数据: set key value >set username zhangsan
获取数据: get key >get username
删除数据: del key >del username
判定性添加数据: setnx key value >setnx username zhangsan
添加修改多个数据: mset key1 value1 key2 value2 …
>mset k1 v1 k2 v2 k3 v3 ……
获取多个数据: mget key1 key2 …… > mget k1 k2 k3 ……
获取数据字符个数(字符串长度):strlen key
>strlen username (return 8)
>strlen k1 (return 2)
追加信息到原始信息后面,若没有就创建:
append key value
>append username 1 (zhangsan1)
>append password 123 (123)
设置整形数据自增/自减(默认自增/自减1)
incr key
>set num 1
>incr/decr num (2)
>incr/decr num (3)
设置整形数据值自增/自减指定数
incrby/decrby key increment
>incrby/decrby num 10 (13)
incrbyfloat key increment
>incrbyfloat num 1.5 (14.5)
设置数据值具有指定的生命周期(支持自动过期)
setex key seconds value
setex code 10 abcd
milliseconds 毫秒
hash基础操作
添加修改数据 hset key field value
>hset user:001 name zhangsan
hmset key field1 value1 field2 value2 …
>hmset user:001 password 123 age 18
hsetnx key field value
hsetnx user:001 name lisi
根据key和field获取单个/多个value
hget key field
>hget user:001 name
hgetall key *
>hgetall user:001
删除数据 >hdel key field1 [field2 field3…]
>hdel user:001 name
>hdel user:001 password age
根据key获取field的数量
hlen key
>hmset user:001 name zhangsan password 123 age 18
hlen user:001
判断指定field是否存在
hexists key field
>hexists user:001 name (1)
>hexists user:001 name111 (0)
根据key获取单个/所有的字段名field
hkey key
>hkey user:001
hvals key
hvals user:001
设置指定字段的数值增加指定范围
hincrby key field increment
hincrbyfloat key field increment
hget user:001 age (18)
hincrby user:001 age 1 (19)
hincrby user:001 age -2 (17)
list基础操作
添加数据—从左侧添加
lpush key value1 [value2 value3 …]
>lpush list1 a b c (3--cba)
从右侧添加 rpush key value1 [value2 value3 …]
>rpush list1 d e f (6--def)
当前数据为:cbadef
范围获取 lrang key start stop
lrang list1 0 -1 (cbadef)
lrang list1 0 2 (cba)
lrang list1 -3 -1 (def)
获取规则 1.从左到右索引cbadef---(0,1,2,3,4,5,6) …
2.从右到左索引cbadef---(-6,-5,-4,-3,-2,-1…)
Index key index
index list1 0
index list1 1
index list1 -1
移除并返回最左侧和最右侧的元素
lpop key
rpop key
>lpop list1 (c)
>lpop list1 (f)
根据key获取value的个数
llen key
llen list1 (4)
key的基础操作
删除操作:del key >set aa bb
>del aa
>get aa (nil)
>hash hash1 k1 v1
>hgetall hash1 (k1, v1)
>del hash1
>hgetall hash1 (empty)
判断key是否存在
>set aaa bbb
>exists aaa (1)
>exists bbb (0)
获取key的类型
>set mystring hellostring
>hset myhash k1 v1
>type mystring
>type myhash
对list,set中的数据进行排序
>sort key
>sort key desc
>lpush list1 11 2 33 7 5 18
>sort list1 (2,5,7,11,18,33)
>sort list1 desc (33,18,11,7,5,2)
对list中的字符串进行排序
>sort key alpha
>sort key desc alpha
>lpush list2 a b c d
>sort list2 alpha (a,b,c,d)
重命名key
>set username zhangsan
>set username2 lisi
>rename username username2
>get username (nil)
>get username2 (zhangsan)
获取key的有效时间
>del username zhangsan
>ttl username (-1)
>ttl username2 (-2)
>setex username3 30 wangwu
>ttl usernmae3 (21)
>pttl usernmae2 (15840)
为指定key设置有效时间
>hset hash1 k1 v1
>ttl hash1
>expire hash1 30 (1)
>ttl hash1 (20)
>hset hash2 k2 v2
>ttl hash2
>expire hash2 3000
>ttl hash2 (26)
>pttl hash2 (21380)
切换key从时效性转换为永久性
setex username 60 zhangsan
ttl username (55)
persist username (1)
ttl username (-1)
存:zadd key score value
取:方式一:仅获取value 不带分数score
zrange key start end
方式二:获取value和score
zrange key start end withscores
删:zrem key value