NoSQL (Not Only sql) 非关系型数据库 行式存储数据库 一般的关系型数据库Mysql,oracle,SqlServer等 列式存储数据库 Cassandra 文档型数据库 mongoDB key-valu
行式存储数据库 一般的关系型数据库Mysql,oracle,SqlServer等
列式存储数据库 Cassandra
文档型数据库 mongoDB
key-value型数据库:
Memcached
早期的NoSql数据库
数据在内存中,不能持久化
支持简单的key-value模式
一般作为缓存数据库
Redis
包含了Memcached的大部分功能
数据在内存中,支持持久化,用作备份
除了支持简单的key-value模式,还支持多种数据结构的存储,如list,set,hash, zset
用作缓存数据库一般
$ wget Http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar -xzvf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
问题:
make时报错解决:缺少命令GCc..
$ yum install gcc gcc-c++
致命错误:jemalloc/jemalloc.h:没有那个文件或目录
解决方案1 :
$ make MALLOC=libc //注意等号两边不能有空格
解决方案2 :
$ make distclean //在make之前执行此命令
$ make
In order to install Redis binaries into /usr/local/bin just use:
$ make install
You can use `make PREFIX=/some/other/directory install` if you wish to use a different destination.
$ redis-server
修改redis.conf 文件:
# By default Redis does not run as a daemon. Use "yes" if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize no
将no 改为 yes
然后:
redis-server redis.conf //此命令可带参数 指定配置文件的位置
查看服务启动与否:
启动成功:
没启动或失败:
用来和redis服务通信的
127.0.0.1:6379> help @server
BGREWRITEAOF - 异步重写AOF
BGSAVE - 异步保存数据集到磁盘
CLIENT GETNAME - 拿到当前连接名
CLIENT ID - 返回当前连接的客户端ID
CLIENT KILL [ip:port] [ID client-id] [TYPE nORMal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no] 杀死某个客户端的连接
CLIENT LIST - 拿到所有客户端的链接集合
CLIENT PAUSE timeout 停止处理来自客户端的命令一段时间
CLIENT REPLY ON|OFF|SKIP 指示服务器是否答复命令
CLIENT SETNAME connection-name 设置当前的连接名
......
常用操作:
多实例端口选择:
$ redis-cli -p 6379 //指定服务端口
$ 127.0.0.1:6379> ping
PONG
单实例关闭:
$ redis-cli shutdown
//或进入redis-cli后在关闭
127.0.0.1:6379> shutdown
指定端口关闭:
$ redis-cli -p 6379 shutdown
2)String类型 操作命令
1) 默认16个数据库,类似数组下标从0开始,初始默认使用0号库
使用命令 select
2)统一密码管理,所有库都是同样的密码,要么都OK,要么一个也连接不上
3) Redis 单线程 + 多路IO复用
串行 vs 多线程 + 锁 (Memcached) vs 单线程 + 多路IO复用(Redis)
注:多路复用是指,使用一个线程来检查多个IO请求的就绪状态
key
Redis 的数据类型: String Set list hash zset(有序Set)
0) 关于键 key 的命令
查看当前库的所有键: $ keys *
判断某个键是否存在: $ exists
查看键的类型: $ type
删除某个键: $ del
为键值设置过期时间,单位秒: expire
查看还有多少秒过期,-1表示永不过期,-2 表示已过期 ttl
查看当前数据库的key的数量 : dbsize
清空当前库: flushdb flushall
1) String : 是Redis最基本的类型,一个key 对应一个 value
是二进制安全的。意味着Redis的String可以包含任何数据,比如jpg图片或者序列化的对象
是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
操作命令:
查询对应键值: get
添加键值对: set
将给定的
获得值得长度:strlen
只有在key不存在时设置key的值: setnx
incr
decr
incrby/decrby
mset
mget
msetnx
getrange
setrange
从<起始位置>开始
setex
getset
原子性: 所谓原子操作是指,不会被线程调度机制打断的操作
在单线程中,能够在单条指令中完成的操作都可以认为是原子操作
在多线程中,不能被其他进程或线程打断的操作就叫原子操作
Redis单命令的原子性主要得益于Redis的单线程
2) List , 单键多值
Redis列表是简单的字符串列表,按照插入顺序排序,可以在列表的头部(左边)或者
(右边) 添加一个元素
底层: 是一个双向链表,所以两端操作性能很高,中间的节点性能较差
注意: push / pop 操作 类似于栈,先push的在尾部
操作命令:
lpush/rpush
lpop/rpop
rpoplpush
lrange
lindex
llen
linsert
lrem
3) Set , 自动排重
Set提供了判断某个成员是否在一个Set集合内的重要接口,List没有
Redis的Set是String类型的无序集合
底层: 是一个value 为 null 的hash表, 所以添加,删除, 查找的复杂度都是O(1)
操作命令:
sadd
smembers
sismember
scard
srem
spop
srandmember
sinter
suNIOn
sdiff
4) hash , 是一个键值对集合
是一个String 类型的field 和 value 的映射表
特别适合用于存储对象
类似于 Java里面的 Map
操作命令:
hset
hget
hmset
hexists key
hkeys
hvals
hincrby
hsetnx
当且仅当field不存在
5) ZSet (sorted set), 是一个有序的没有重复元素的字符串集合
所有成员都关联了一个评分(score)
评分score用来按照从最低分到最高分的方式排序集合中的成员
成员唯一,评分可以重复
操作命令:
zadd
zrange
zrangebyscore key min max [WITHSCORES] by score
zrevrangebyscore key max min [WITHSCORES] [limit offset count]
zincrby
zrem
zcount
zrank
1) 导包
redis.clients
jedis
3.0.1
2) 连接虚拟机Redis服务注意事项
1. 禁用linux的防火墙
systemctl stop firewalld
2. redis.conf 中注释掉 bind 127.0.0.1 (60行左右)
protect-mode (80行左右) 设置为 no
3) 测试连通性
public class JedisTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.18.130", 6379);
jedis.select(3); //选择库
Set keys = jedis.keys("*"); //获取键集
String ping = jedis.ping(); //输出 PONG
for (String key : keys) {
System.out.println(jedis.smembers(key)); //Set类型的遍历
}
}
}
--结束END--
本文标题: Redis
本文链接: https://lsjlt.com/news/2588.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0