Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。
Redis从它的许多竞争继承来的三个主要特点:
Redis支持5种类型的数据类型,它描述如下的:数据类型指的是对应的redis索引值下边存放的内容,其实可以将redis的key值理解成索引。
List和Set的区别:
1、List,Set都是继承自Collection接口
2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
3、List接口有三个实现类:LinkedList,ArrayList,Vector ,Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
一:String 类型:
localhost:6379> set name "xiaohui"
OK
localhost:6379> get name
"xiaohui"
二、哈希
Redis的哈希是键值对的集合。 Redis的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象,其实我认为的就是哈希是对一个的key中存放的内容是key和value形式的。 至于一下采用的user:1 表示的索引值,其实指的是目录形式,冒号表示一层目录。
localhost:6379> HMSET user:1 username xiaohui password 1234 points 20
OK
localhost:6379> HGETALL user:1
1) "username"
2) "xiaohui"
3) "password"
4) "1234"
5) "points"
6) "20"
三:集合SET
Redis的集合是字符串的无序集合。在Redis您可以添加,删除和测试文件是否存在,在成员O(1)的时间复杂度。注意:在下面的例子中rabitmq集合添加加两次,但由于集合元素具有唯一属性。
localhost:6379> sadd tutor reids
(integer) 1
localhost:6379> sadd tutor mongodb
(integer) 1
localhost:6379> sadd tutor rabitmq
(integer) 1
localhost:6379> sadd tutor rabitmq
(integer) 0
localhost:6379> smembers tutor
1) "mongodb"
2) "rabitmq"
3) "reids"
四:有序集合:ZSET
Redis的有序集合类似于Redis的集合,字符串不重复的集合。不同的是,一个有序集合的每个成员用分数,以便采取有序set命令,从最小的到最大的成员分数有关。虽然成员具有唯一性,但分数可能会重复。
localhost:6379> zadd zset 1 redis
(integer) 1
localhost:6379> zadd zset 2 mongodb
(integer) 1
localhost:6379> zadd zset 6 mysql
(integer) 1
localhost:6379> zadd zset 3 "sql server"
(integer) 1
localhost:6379> zadd zset 3 "nosql"
(integer) 1
localhost:6379> zrange zset 0 10
1) "redis"
2) "mongodb"
3) "nosql"
4) "sql server"
5) "mysql"
五:Redis - 列表 LIST
Redis的列表是简单的字符串列表,排序插入顺序。您可以添加Redis元素在列表头部或列表的尾部。
列表的最大长度为 232 - 1 个元素(每个列表元素个数超过4294967295)。
localhost:6379> lpush list "name"
(integer) 1
localhost:6379> lpush list "age"
(integer) 2
localhost:6379> lpush list "sex"
(integer) 3
localhost:6379> lpush list "is agree leads"
(integer) 4
localhost:6379> lpush list "description"
(integer) 5
localhost:6379> lpush list "name"
(integer) 6
localhost:6379> lrange list 0 1000
1) "name"
2) "description"
3) "is agree leads"
4) "sex"
5) "age"
6) "name"
localhost:6379> lrange list 0 2
1) "description"
2) "is agree leads"
3) "sex"
六:Redis的HyperLogLog使用随机化,以提供唯一的元素数目近似的集合只使用一个常数,并且体积小,少量内存的算法。
HyperLogLog提供,即使每个使用了非常少量的内存(12千字节),标准误差为集合的基数非常近似,没有限制的条目数,可以指定,除非接近 264个条目。
localhost:6379> pfadd hyperlog redis
(integer) 1
localhost:6379> pfadd hyperlog mongodb
(integer) 1
localhost:6379> pfadd hyperlog mysql
(integer) 1
localhost:6379> pfcount hyperlog
(integer) 3
localhost:6379> get hyperlog
"HYLL\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00H\x91\x80K\xe7\x8cP~\x84[\x03"
七:Redis - 订阅
Redis的订阅实现了邮件系统,发送者(在Redis的术语中被称为发布者)发送的邮件,而接收器(用户)接收它们。由该消息传送的链路被称为通道。其实十分类似于kafka的消息订阅机制,客户端确定一个topic,在redis中被叫做通道,然后发送方向该通道中写消息,订阅方从该通道中读消息
先打开订阅方
localhost:6379> subscribe redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
1) "message"
2) "redisChat"
3) "xiaohui is very good"
1) "message"
2) "redisChat"
3) "how are you "
然后发送方发送数据
localhost:6379> pubish redisChat "xiaohui is very good"
(error) ERR unknown command 'pubish'
localhost:6379> publish redisChat "xiaohui is very good"
(integer) 1
localhost:6379> publish redisChat "how are you "
(integer) 1
八:Redis - 事务
Redis事务让一组命令在单个步骤执行。事务中有两个属性,说明如下:
Redis INCR命令用于由一个递增key的整数值。如果该key不存在,它被设置为0执行操作之前。如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误。
localhost:6379> set doctor tranction
QUEUED
localhost:6379> get doctor
QUEUED
localhost:6379> incr visitors
QUEUED
localhost:6379> exec
1) OK
2) "tranction"
3) (integer) 1
九:SAVE redis 为当前数据库创建备份,当然也可以采用besave命令进行备份
localhost:6379> save
37943:M 04 Feb 17:28:33.477 * DB saved on disk
OK
十:Redis - 基准
Redis基准是公用工具同时运行Ñ命令检查Redis的性能。
./redis-benchmark -n 10000
十一:Redis 的一些配置信息
备份目录的存放地方
localhost:6379> config get dir
1) "dir"
2) "/usr/local/Cellar/redis/3.0.7/bin"
客户端的最大数量
localhost:6379> config get maxclients
1) "maxclients"
2) "10000"
十二:Redis - 管道传输
Redis是一个TCP服务器,并支持请求/响应协议。在redis一个请求完成下面的步骤:
管道传输的含义
管道的基本含义是,客户端可以发送多个请求给服务器,而无需等待答复所有,并最后读取在单个步骤中的答复。
十三:redis一些基本命令
进入到redis目录下,然后进行
./redis-cli -h 10.10.39.150 -p 6379
localhost:6379> set rediKey value
OK
localhost:6379> set age 24
OK
localhost:6379> set name xiaohui
OK
localhost:6379> set sex female
OK
通过key值得到value:
localhost:6379> get rediKey
"value"
keys *命令:
localhost:6379> keys *
1) "sex"
2) "name"
3) "nova:comment:acceptor:2"
4) "nova:comment:acceptor:1"
5) "rediKey"
6) "age"
判断某个key是否存在:
localhost:6379> exists sex
(integer) 1
localhost:6379> exists chen
(integer) 0
删除某个key
localhost:6379> del rediKey
(integer) 1
重命名key rename/renamenx
localhost:6379> rename name Name
OK
localhost:6379> renamenx age Age
(integer) 1
设置过期时间和持久化expire/persist还有个命令就是查看当前的情况,ttl意思是time to live
expire 设置key的超时时间为10s,ttl 是用来查看这个key还有多久超时
localhost:6379> expire sex 10
(integer) 1
localhost:6379> ttl sex
(integer) 7
localhost:6379> ttl sex
(integer) 3
localhost:6379> ttl sex
(integer) 1
localhost:6379> ttl sex
(integer) -2
localhost:6379> keys *
1) "nova:comment:acceptor:2"
2) "Name"
3) "nova:comment:acceptor:1"
4) "Age"
持久化Age这个key
localhost:6379> expire Age 20
(integer) 1
localhost:6379> ttl Age
(integer) 17
localhost:6379> persist Age
(integer) 1
localhost:6379> ttl Age
(integer) -1
localhost:6379> keys *
1) "nova:comment:acceptor:2"
2) "Name"
3) "nova:comment:acceptor:1"
4) "Age"
redis 默认有16个库存,然后进行选择和使用,从db0到db15,当没有进行选择ku的时候,会自动将其放到第0个库存
localhost:6379[12]> select 0
OK
localhost:6379> keys *
1) "nova:comment:acceptor:2"
2) "Name"
3) "nova:comment:acceptor:1"
4) "Age"
localhost:6379> select 1
OK
localhost:6379[1]> keys *
(empty list or set)
将一个库存里边的东西,移动到另一个库存里去:
localhost:6379[1]> select 0
OK
localhost:6379> keys *
1) "nova:comment:acceptor:2"
2) "Name"
3) "nova:comment:acceptor:1"
4) "Age"
localhost:6379> move Name 1
(integer) 1
localhost:6379> keys *
1) "nova:comment:acceptor:2"
2) "nova:comment:acceptor:1"
3) "Age"
localhost:6379> select 1
OK
localhost:6379[1]> keys *
1) "Name"
flushall 会清空所有库存中的东西
localhost:6379[1]> flushall
37943:M 04 Feb 11:24:50.449 * DB saved on disk
OK
flushdb 会清空当前库存中的数据
localhost:6379[1]> flushdb
OK
localhost:6379[1]> keys *
(empty list or set)