标签:快速 exec 效率 emc 说明 multi cal 否则 conf
目录
开源是嵌入式数据库,有极好的并发伸缩,支持事务及嵌套事务,海量数据存储等重要特性。用于存储数据方面有极高的价值。,然而该产品的Licence为GPL,这就意味着它不是在所有情况下都是免费的,并且一般情况下不能单独使用
和Berkeley不同的是MongoDB可以单独使用,主要用于高并发的论坛博客使用,这些论坛博客主要特征是并发高、多读少写、数据量大、逻辑关系简单,以及文档作为数据主要源。和Berkeley一样该产品的Licence为GPL
典型的NoSQL数据库服务器,和BerkeleyDB相比它可以独立运行自己的服务器主机。它除了key/vale之外还支持List、set和OrderedSet等数据结构。它是Apache Licence 完全免费的。它是持久化的,如果服务器宕机也不会导致数据消失。
数据缓存服务器。他们之间最大的区别,memcache知识提供了存储服务,一旦服务器宕机,之前砸内存中缓存的数据全局消失。一次可以看出memcache没有提供任何形式的数据持久化功能。而Redis提供了这样的功能。
可使用wget 注解从网站下载也可在windows下下载完成通过ft‘p传到指定目录下
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
默认下载到当前目录。
使用tar -zxf redis-4.0.1.tar.gz 解压
如果你想给redis 安装到指定目录下,使用mv命令移动
mv /edis-4.0.1 /service/redis
mv:从哪->到哪
因为redis 用的是c语言编写,所以还需要编译一下才能安装。
如果提示找不到yum 要先安装 gcc-c—++使用 yum install gcc-c++
进入到redis解压目录,使用 make install prefix=安装路径
安装完毕。
进入到解压路径目录下(到bin目录下) 或者直接指定全部路,否则找不到redis-service 命令的。 想不明白想想windows执行命令。
[root@linux bin]# ls
redis-benchmark redis-check-rdb redis-sentinel
redis-check-aof redis-cli redis-server
[root@linux bin]# redis-server
vim redis.conf
port 端口
daemonize yes 配置为守护进程,后台启动
bind 配置指定IP访问,如果指定所有人访问 注释掉bind 并且关闭保护模式 protected-mode 改成no
requirepass 设置密码
客户端使用 auth 密码 才可以访问
root@linux ~]# redis-cli -p 8989
127.0.0.1:8989> set name lihai
(error) NOAUTH Authentication required.
127.0.0.1:8989> auth lixiaohai
OK
127.0.0.1:8989> set name lixiaohai
OK
127.0.0.1:8989> get name
"lixiaohai"
127.0.0.1:8989>
[root@linux bin]# cd ../../gz
[root@linux gz]# ls
redis-3.2.8 redis-3.2.8.tar.gz
[root@linux gz]# ls redis-3.2.8
00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
[root@linux redis-3.2.8]# cp redis.conf ../../redis/bin/
[root@linux redis-3.2.8]# cd ../../redis/bin/
[root@linux bin]# ls
dump.rdb redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
[root@linux bin]# redis-server redis.conf
cd /java/redis/redis/bin
[root@linux bin]# ls
redis-benchmark redis-check-rdb redis-sentinel
redis-check-aof redis-cli redis-server
[root@linux bin]# redis-cli
127.0.0.1:6379>
[root@linux bin]# cd /java/redis/redis/bin
[root@linux bin]# ls
dump.rdb redis-check-aof redis-cli redis-sentinel
redis-benchmark redis-check-rdb redis.conf redis-server
[root@linux bin]# redis-cli -h localhost -p 6379
localhost:6379> get name
"xiaohaili"
localhost:6379>
127.0.0.1:6379> set name xiaohaili
OK
127.0.0.1:6379> get name
"xiaohaili"
127.0.0.1:6379>
localhost:6379> shutdown
not connected>
[root@linux bin]# cd /java/redis/redis/bin
[root@linux bin]# ls
dump.rdb redis-check-aof redis-cli redis-sentinel
redis-benchmark redis-check-rdb redis.conf redis-server
[root@linux bin]# redis-cli shutdown
[root@linux bin]#
ps aux|grep redis
[root@linux bin]# ps aux|grep redis
root 10045 0.0 0.0 112708 972 pts/1 R+ 11:31 0:00 grep --color=auto redis
[root@linux bin]#
Redis数据就是以key-value形式来存储的,key只能是字符类型,value可以是以下五种类型,String,List,Sorted-Sets,Hash
字符串类型是Redis最为基础的数据存储类型,它在Redis是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像格式或者JSON对象格式,在Redis中字符串类型的Value最多可以容纳数据长度是512M
set key value [Ex seconds] [PX milliseconds] [NX|XX]
Ex 秒
PX 毫秒
NX 当key不存在的时候起作用
XX 当key存在时候才起作用
注意:EX PX NX|XX 不能同时使用
ttl key 查看过 期时间
127.0.0.1:8989> set xiaokey xiaovalue ex 100
OK
127.0.0.1:8989> get xiaokey
"xiaovalue"
127.0.0.1:8989> ttl xiaokey
(integer) 90
127.0.0.1:8989> ttl xiaokey
(integer) 87
127.0.0.1:8989>
msetnx
一次性获取多个,但是key不存在的时候才执行(一个key存在所有key都存储失败)
#### 概述
在Redis中,List类型是按照顺序插入排序的字符串链表。和数据结构中的普通链表一样,我们可以再其头部和尾部添加新的元素。在出让时,如果该键并不存在,Redis姜维该键创建一个新的链表。与此相比,如果链表中所有的元素均被移除,name该键也将会从数据库中删除。List可以包含的最大元素数量是4292967295,。
从插入和删除的效率视角看,如果我们在链表的两头插入或者删除,这将会是效率非常高的。即使链表中已经存储了百万数据记录,该操作可以在常亮内完成。然而需要说明的是没如果元素插入或者删除在作用于链表中间,name效率非常低。
lpush mykey a b c d e f
(integer) 6
lpush mykeyright a b c d e f
(integer) 6
127.0.0.1:8989> lrange mykeyright 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
lrange mykeyright 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
lpushx mykey 1
(integer) 9
127.0.0.1:8989> lpushx mykeynotexit 1 2 3
(error) ERR wrong number of arguments for 'lpushx' command
lrange mykey 0 3
1) "f"
2) "e"
3) "d"
4) "c"
取出所有 -1 代表所有
lrange mykey 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
lpop mykey
127.0.0.1:8989> llen mykey
(integer) 7
127.0.0.1:8989> lpop mykey
"123"
127.0.0.1:8989> llen mykey
(integer) 6
rpop 取出列表里面的第一个元素并删除(从右到左)
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "dd"
3) "cc"
4) "c"
127.0.0.1:8989> rpop mykey
"c"
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "dd"
3) "cc"
127.0.0.1:8989>
rpoppush 从右取出第一个并删除,放到另外一个列表(从左边放进去)
127.0.0.1:8989> lpush mykey a b
(integer) 2
127.0.0.1:8989> lpush mykey1 e d
(integer) 2
127.0.0.1:8989> lrange mykey 0 -1
1) "b"
2) "a"
127.0.0.1:8989> lrange mykey1 0 -1
1) "d"
2) "e"
127.0.0.1:8989> rpoplpush mykey mykey1
"a"
127.0.0.1:8989> lrange mykey1 0 -1
1) "a"
2) "d"
3) "e"
llen mykey
(integer) 6
lrem key 个数 关键词
127.0.0.1:8989> lpush mykey a b c d e f a b c d e f a b c d e f
(integer) 18
127.0.0.1:8989> lrem mykey 2 b
(integer) 2
127.0.0.1:8989> lrange mykey 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "a"
6) "f"
7) "e"
8) "d"
9) "c"
10) "a"
11) "f"
12) "e"
13) "d"
14) "c"
15) "b"
16) "a"
lindex mykey 2
"d"
lset mykey 2 ss
OK
127.0.0.1:8989> lindex mykey 2
"ss"
lpush mykey a b c d e f
(integer) 6
127.0.0.1:8989> ltrim mykey 2 4
OK
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "c"
3) "b"
linsert mykey after d dd 在d后面插入dd
lrange mykey 0 -1
1) "d"
2) "c"
3) "b"
127.0.0.1:8989> linsert mykey after d dd
(integer) 4
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "dd"
3) "c"
4) "b"
linsert mykey before c cc 在c前面插入cc
127.0.0.1:8989> linsert mykey before c cc
(integer) 5
127.0.0.1:8989> lrange mykey 0 -1
1) "d"
2) "dd"
3) "cc"
4) "c"
5) "b"
在Redis中,我们可以将Set类型看作为没有排序的字符集合(java set一样)也可以在该类型的数据值上执行添加,删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4294967295.
和List类型不同的是,Set结合中不可以出现重复的元素。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions并,intersections交和differences差。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> sadd setkey a d
(integer) 1
127.0.0.1:8989> smembers setkey
1) "d"
2) "a"
3) "c"
4) "b"
127.0.0.1:8989> smembers setkey
1) "d"
2) "a"
3) "c"
4) "b"
127.0.0.1:8989> sismember setkey a
(integer) 1
127.0.0.1:8989> sismember setkey ggg
(integer) 0
*scard 获取结合里面个数
127.0.0.1:8989> scard setkey
(integer) 4
127.0.0.1:8989> SRANDMEMBER setkey 3
1) "d"
2) "b"
3) "c"
127.0.0.1:8989> SRANDMEMBER setkey
"d"
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> smembers setkey
1) "a"
2) "c"
3) "b"
127.0.0.1:8989> spop setkey
"a"
127.0.0.1:8989> smembers setkey
1) "c"
2) "b"
127.0.0.1:8989>
127.0.0.1:8989> smembers setkey
1) "c"
2) "b"
127.0.0.1:8989> srem setkey c
(integer) 1
127.0.0.1:8989> smembers setkey
1) "b"
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> sadd setkey1 d f
(integer) 2
127.0.0.1:8989> smove setkey setkey1 c
(integer) 1
127.0.0.1:8989> SMEMBERS setkey1
1) "d"
2) "c"
3) "f"
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> sadd setky1 d c
(integer) 2
127.0.0.1:8989> sadd setkey2 b c d
(integer) 3
127.0.0.1:8989> sdiff setkey setkey1 setkey2
1) "a"
127.0.0.1:8989> sadd setkey a b c
(integer) 3
127.0.0.1:8989> sadd setky1 d c
(integer) 2
127.0.0.1:8989> sadd setkey2 b c d
(integer) 3
127.0.0.1:8989>SDIFFSTORE setkeysdiff setkey setkey1 setkey2
(integer) 1
127.0.0.1:8989> SMEMBERS setkeysdiff
1) "a"
127.0.0.1:8989> sadd setkey a b
(integer) 2
127.0.0.1:8989> sadd setkey1 a c
(integer) 2
127.0.0.1:8989> sadd setkey2 a e
(integer) 2
127.0.0.1:8989> sinter setkey setkey1 setkey2
1) "a"
127.0.0.1:8989> sadd setkey a b
(integer) 2
127.0.0.1:8989> sadd setkey1 a c
(integer) 2
127.0.0.1:8989> sadd setkey2 a f
(integer) 2
127.0.0.1:8989> sinterstore newkey setkey setkey1 setkey2
(integer) 1
127.0.0.1:8989> SMEMBERS newkey
1) "a"
127.0.0.1:8989> sadd setkey a b
(integer) 2
127.0.0.1:8989> sadd setkey1 a c
(integer) 2
127.0.0.1:8989> sadd setkey2 a f
(integer) 2
SUNION setkey setkey1 setkey2
1) "a"
2) "f"
3) "c"
4) "b"
SUNIONSTORE newkeys setkey setkey1 setkey2
(integer) 4
127.0.0.1:8989> smembers newkeys
1) "a"
2) "f"
3) "c"
4) "b"
Sorted-Sets和Sets类型极为相似,也成为Zset,它们都是字符集合,都不可以重复,它们之间的区别在于Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正式通过分数啦为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的。但是分数(score)确实可以重复的。
在Sorted-Set中 添加、删除或者更新一个成员都是非常快速的操作。由于Sorted-Sets总的成员在集合中的位置是有序的,因此,即使是访问位于集合中的成员也是效率非常高的。事实上,Redis具有的这一特性在很多其他类型的数据库中是很难实现的。换句话说,在该点上想要达到和Redis同样的效率,在其他数据库中进行模建是非常困难的。
127.0.0.1:8989> zadd zsetkey 8 aa
(integer) 1
127.0.0.1:8989> zadd zsetkey 6 bb
(integer) 1
127.0.0.1:8989> zadd zsetkey 10 cc
(integer) 1
127.0.0.1:8989> zrange zsetkey 0 -1
1) "bb"
2) "aa"
3) "cc"
127.0.0.1:8989> zrange zsetkey 0 -1
1) "bb"
2) "aa"
3) "cc"
//查看数值并显示分数
127.0.0.1:8989> zrange zsetkey 0 -1 withscores
1) "bb"
2) "6"
3) "aa"
4) "8"
5) "cc"
6) "10"
127.0.0.1:8989> zadd setkey 10 aa
(integer) 1
127.0.0.1:8989> zadd setkey 20 bb
(integer) 1
127.0.0.1:8989> zadd setkey 3 cc
(integer) 1
127.0.0.1:8989> zadd setkey 8 dd
(integer) 1
127.0.0.1:8989> ZREVRANGE setkey 0 -1
1) "bb"
2) "aa"
3) "dd"
4) "cc"
zrevrangebyscore 按分数从高到低
zcard zsetkey
(integer) 3
//获取zsetkey 分数在5-20之间的个数
zcount zsetkey 5 20
(integer) 3
zrank zsetkey aa
(integer) 1
zscore zsetkey aa
"8"
127.0.0.1:8989> zadd setkey 8 aa
(integer) 1
127.0.0.1:8989> zadd setkey 9 bb
(integer) 1
127.0.0.1:8989> zincrby setkey 10 bb
"19"
127.0.0.1:8989> zrange setkey 0 -1 withscores
1) "aa"
2) "8"
3) "bb"
4) "19"
// 获取分数1-20之间
ZRANGEBYSCORE setkey 1 20
1) "aa"
2) "bb"
// 获取分数1-20之间 并显示2条
ZRANGEBYSCORE setkey 1 20 limit 1 2
1) "bb"
2) "cc"
ZREVRANGEBYSCORE setkey 20 8
1) "bb"
2) "aa"
3) "dd"
zrevrank setkey dd
(integer) 2
// 删除1-14分的数据 返回删除个数
127.0.0.1:8989> ZREMRANGEBYSCORE setkey 1 14
(integer) 3
127.0.0.1:8989> zrange setkey 0 -1
1) "dd"
2) "ff"
ZREMRANGEBYRANK setkey 0 1
(integer) 2
可以将Redis中的Hash类型看成具有String key和String value的map容器。所以该类型非常适合存储于对象的信息。如username、password和Age等。如果Hash中包含很少的字段,那么该类型也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
127.0.0.1:8989> hset hkey name tom
(integer) 1
127.0.0.1:8989> hset hkey age 10
(integer) 1
127.0.0.1:8989> hset hkey sex '男'
(integer) 1
127.0.0.1:8989> hget hkey name
"tom"
127.0.0.1:8989> hget hkey name
"tom"
127.0.0.1:8989> hset hkey name tom
(integer) 1
127.0.0.1:8989> hset hkey age 10
(integer) 1
127.0.0.1:8989> hset hkey sex '男'
(integer) 1
127.0.0.1:8989> hlen hkey
(integer) 3
hexists hkey name
(integer) 1
hdel hkey name
(integer) 1
127.0.0.1:8989> hset hkey name tom
(integer) 1
127.0.0.1:8989> hset hkey age 10
(integer) 1
127.0.0.1:8989> hsetnx hkey name tom
(integer) 0
127.0.0.1:8989> hget hkey age
"30"
127.0.0.1:8989> hincrby hkey age 10
(integer) 40
127.0.0.1:8989> hget hkey age
"40"
127.0.0.1:8989>
hmset hashkey name toms age 10 sex '男'
OK
127.0.0.1:8989> hgetall hashkey
1) "name"
2) "toms"
3) "age"
4) "10"
5) "sex"
6) "\xe7\x94\xb7"
hmget hashkey name age
1) "toms"
2) "10"
hgetall hashkey
1) "name"
2) "toms"
3) "age"
4) "10"
5) "sex"
6) "\xe7\x94\xb7"
127.0.0.1:8989> hkeys hashkey
1) "name"
2) "age"
3) "sex"
#### keys
keys * 获取所有的key
也可以使用通配符
keys s*
删除 指定key del key
判断key是否存在
把当前数据库中的key 移动到指定位置
move zset 2
(integer) 1
127.0.0.1:8989> select 2
OK
127.0.0.1:8989[2]> exists zset
127.0.0.1:8989[2]> rename zset newzset
OK
在Redis中配置Master-Slave模式非常简单,Redis中主从复制的特点和优势
Master可以将数据保存操作交给Slaves完成,从而避免在Master中要有独立的进程来完成此操作。
在conf配置 永久生效
slaveof ip 端口
如果主服务器有密码,需要指定密码
masterauth 密码
Redis 提供了持久化方式
RDB是默认的持久化方式,默认存储在启动redis服务器时所在当前目录下dump.rdb文件中,一般都会修改存储在一个固定的目录下
编辑redis.conf 文件
dbfilename :文件名(默认是dump.rdb) 可以修改
dir /路径 保存咋指定位置。
持久化的机制
使用Jedis
Jedis是一个封装了redis的java客户端,继承了redis的一些命令操作,提供了连接池管理功能。
使用Spring data Redis
简称SDR,在spring应用中读写Redis数据库更简单
标签:快速 exec 效率 emc 说明 multi cal 否则 conf
原文地址:https://www.cnblogs.com/lilihai/p/10142052.html