linux系统redis数据库

来源:互联网 发布:c# 多cpu 编程 编辑:程序博客网 时间:2024/06/10 16:37
1.网络三高:高并发,高负载,高扩展
NoSQL数据库的四大分类:
键值(key-value)存储数据库
列存储数据库
文档型数据库
图形数据库
2.NoSQL特点:在大数据存取上具备关系型数据库无法比拟的性能优势
1.易扩展2.大数据量,高性能3.灵活的数据模型4.高可用
3.什么是Redis?
Redis使用C语言开发的一个开源的高性能键值对数据库,他通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值类型如下:
1.字符串类型2.散列类型(hash)3.列表类型(list)4.集合类型5.有序集合类型(set)
4.redis在Linux上的安装
1)安装redis编译的C环境,yum install gcc-c++
2)将redis-2.6.16.tar.gz上传到Linux系统中
3)解压到/usr/local下 tar -xvf redis-2.6.16.tar.gz -C /usr/local
4)进入redis-2.6.16目录,使用make编译redis
5)在redis-2.6.16目录中,使用make PREFIX=/usr/local/redis install命令安装到/usr/local/redis中
6)拷贝redis-2.6.16中的redis.conf到安装目录redis中
7)启动redis在bin下执行命令redis-server redis.conf到安装目录redis中
8)8)如需远程连接redis,需配置redis端口6379在linux防火墙中开发
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save
此时服务器启动了,另外打开一个远程连接的窗口,cd /usr/local/redis/bin
./redis-cli相当于链接上了数据库set username zhangsan ,get username
9)关闭服务器ps -ef | grep redis查看服务器进程号,然后kill -9 +进程号
10)进入redis.conf文件中的daemonize从No修改成yes表示后台启动,./redis-server redis.conf开启服务器
5.java远程链接redis数据库

在项目中导入commons-pool2-2.3.jar,jedis-2.7.0.jar包

public class JedisTest {//通过Java程序访问redis数据库@Testpublic void test1(){//1获得链接对象Jedis jedis=new Jedis("192.168.2.110",6379);//2.获得数据String username=jedis.get("username");System.out.println(username);//3.存储jedis.set("addr","北京");System.out.println(jedis.get("addr"));}}6.通过配置文件封装远程链接redis数据库池的工具类配置文件redis.propertiesredis.maxIdle=30redis.minIdle=10redis.maxTotal=100redis.url=192.168.2.110redis.port=6379工具类public class JedisPoolUtils {private static JedisPool pool=null;static{//加载配置文件InputStream in=JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");Properties pro=new Properties();try {pro.load(in);} catch (IOException e) {e.printStackTrace();}//获得池子对象JedisPoolConfig poolConfig=new JedisPoolConfig();poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大链接数//1创建一个redis的链接池pool=new JedisPool(poolConfig,pro.getProperty("redis.url"),Integer.parseInt(pro.get("redis.port").toString()));}//获得jedis资源的方法public static Jedis getJedis(){return pool.getResource();}public static void main(String[] args){Jedis jedis=getJedis();System.out.println(jedis.get("xxx"));}}
4)incr key:将指定的key的value原子性的递增1.如果该key不存在,其初始值为0,在incr之后其值为1。如果value的值不能转成整型,如hello,该操作将执 行失败并返回相应的错误信息。
5)decr key:将指定的key的value原子性的递减1.如果该key不存在,其初始值 为0,在incr之后其值为-1。如果value的值不能转成整型,如hello,该操作将执 行失败并返回相应的错误信息。
6)incrby key increment:将指定的key的value原子性增加increment,如果该key不存在,器初始值为0,在incrby之后,该值为increment。如果该值不能转成整型,如hello则失败并返回错误信息incrby num 9;
7)decrby key decrement:将指定的key的value原子性减少decrement,如果该key不存在,器初始值为0,在decrby之后,该值为decrement。如果该值不能转成整型,如hello则失败并返回错误信息decrby num 3
8)append key value:如果该key存在,则在原有的value后追加该值;如果该 key 不存在,则重新创建一个key/value
7.存储hash
Redis中的hash类型可以看成具有String key和string value的map容器,所以该类型非常适合存储值对象信息。
hset key field value:为指定的key设定field/value对,比如:hset myhash name tom;
hget key field:返回指定的key中的field的值,比如:hget myhash name
hmget key fields:获取key中的多个field的值,比如:hmget myhash name age;
hgetall key:获取key中的所有键值对,比如:hgetall myhash
hdel key field:可以删除一个或多个字段,返回值是被删除的字段个数,比如:hdel myhash name;
del key:删除整个list,比如:del myhash
hincyby key field increament:设置key中field的值增加increment,比如:hincrby myhash age 5;
hexists key field:判断指定的key中的field是否存在,比如:hexists myhash name;
hlen key:获取key所包含的field的数量,比如:hlen myhash
hkeys key:获得所有key,比如:hkeys key;
8.存储list
list类型是按照插入顺序排序的字符串链表,我们可以在头部(left)和尾部(right)插入新的元素
lpush key values:比如lpush mylist a b c
rpush key values:从右边添加元素
lrange key start end:获得链表中从start到end的元素的值,比如lrange mylist 0 -1
lpop key:返回并弹出指定的key关联的链表中的第一个元素,比如lpop mylist
llen key:返回指定的key关联的链表中的元素的数量,比如llen mylist
lpushx key value:仅当参数中指定的key存在是,向关联的list的头部插入value,如果不存在不插入,lpushx mylist xml配置文件中修改
lrem key count value:删除count个值为value的元素,如果count值小于0则从尾向头遍历并删除,比如lrem mylist 2 a
lset key index value:设置链表中的index的脚标的元素的值,0代表头部-1代表尾部,比如lset mylist 0 aaa
linsert key before/after x value:在x元素前或后插入value,比如:linsert mylist before a xxx
rpoplpush resource destination:将链表中的尾部元素弹出并添加到头部
9.存储set
set集合中不允许出现重复的元素
sadd key value:向set中添加数据,不允许添加重复的
srem key members:删除set中指定的成员srem myset 1 2
smembers key:获得set中的所有的成员,smembers myset
sismember key member:判断参数中指定的成员是否在该set中,1表示存在0表示不存在,sismember myset a
sdiff mya1 mya2:返回key1与Key2中相差的成员,返回差集
sinter key1 key2:返回交集
sunion key1 key2:返回并集
scard key:获得set中成员的数量,scard myset
srandmember key:随机返回set中的一个成员
sdiffstore destination key1:将key1.key2相差的成员存储在destination上
10.存储sortedset
zadd key score member score2 member2:将所有成员以及该成员的分数存放发哦sorted-set
zscore key member:返回指定成员的分数
zcard key:获取集合中的成员数量
zrem key member:移除集合中指定的成员
zrevrange key start stop :元素分数从大到小的顺序返回索引从start到stop之间所有元素
zremrangebyrank key start stop:按照排名范围删除元素
zremrangebyscore key min max:按照分数范围删除元素
keys *:表示任意一个或多个字符
del key1:删除指定的Key
exists key:判断该key是否存在,1代表存在,0代表不存在
rename key newkey:为当前的Key重命名
expire key:设置过期时间,单位秒
ttl key:获取该key所剩的超时时间
type key:获取指定key的类型
11.多数据库
一个redis实例最多可提供16个数据库,下标从0到15,客户端默认链接第0号数据库,也可通过select选择链接那个数据库
move newkey1:将当前库的key移植到1号库中
info:获取服务器的信息和统计
flushdb:删除当前选择数据库中的所有key
12.消息订阅与发布
subscribe channel:订阅频道
psubscribe channel*:批量订阅频道
publish channel content:在制定的频道中发布消息
12.redis事务
multi:开启事务用于标记事务的开始,其后执行的命令都将被存入命令队列,直到执行exec这些命令才会被原子的执行
exec:提交事务
discard:事务回滚
13.redis持久化
redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式,可以单独使用其中一种或将二者结合使用
(1)RDB持久化
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘
(2)AOF持久化
该机制将以日志的形式记录服务器所处理的每一个写操作,在redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的