Redis 初窥 安装启动 shell java api使用

redis

Nosql是为了解决高并发,高扩展,高写入而产生的数据库解决方案
是关系型数据库的良好补充,而不能替代关系型数据库

Redis是用C语言开发的高性能的键值对存储的Nosql数据库。
redis是一个内存nosql数据库
redis中也是存储key-value形式的数据
redis中的key-value相比hbase等数据库来说,redis的value比较强大,它的value可以不仅仅是一个byte[]
redis的value可以有结构:可以是一个list,也可以是一个hash,也可以是set…
Redis存储的数据类型有五种:字符(string)、散列(hash)、列表(list)、集合(set)、有序集合(sorted set)
所以redis经常被称作为:数据结构服务器

redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。

redis 的安装启动
在linux系统进行安装
1.下载redis5的稳定版本,下载地址http://download.redis.io/releases/redis-5.0.9.tar.gz
2.上传redis-5.0.9.tar.gz到Linux服务器
3.解压redis源码包
tar -zxvf redis-5.0.9.tar.gz -C /usr/local/src/
4.进入到源码包中,编译并安装redis
cd /usr/local/src/redis-5.0.9/
make && make install
5.报错,缺少依赖的包
6.配置本地YUM源并安装redis依赖的rpm包
yum -y install gcc
7.编译并安装
make && make install
8.报错,原因是没有安装jemalloc内存分配器,可以安装jemalloc或直接输入
make MALLOC=libc && make install
9.重新编译安装
make MALLOC=libc && make install
10.在/usr/local/下创建一个redis目录,然后拷贝redis自带的配置文件redis.conf到/usr/local/redis
mkdir /usr/local/redis
cp /usr/local/src/redis-5.0.9/redis.conf /usr/local/redis
11.修改当前机器的配置文件redis.conf
bind 172.16.200.103 127.0.0.1
daemonize yes #redis后台运行
requirepass 123456 #指定redis的密码
dir /data/redis #redis数据存储的位置
appendonly yes #开启aof日志,它会每次写操作都记录一条日志
12.启动redis节点
cd /usr/local/redis
redis-server redis.conf
13.查看redis进程状态
ps -ef | grep redis
使用命令登录:
redis-cli -h 172.16.200.103 -p 6379
#验证密码
auth 123456

停掉redis shutdown save
exit 退出 redis

flushdb 清理当前DB
select 2 选择第二个DB

set数据
set huzhongwu 666
set hh 222
get取数据
get huzhongwu
set数据指定key-value的超时时长 (超时时长为30秒)
set huzhongwu 8888 EX 30
keys *

Value为string类型命令使用
字符串 Map(String,String)
set xxx 111
get xxx
del xxx xxx1 xxx2
set aaa 111 ex 10 (超时10秒删除)

incr aaa aaa增长1
decr aaa aaa减少1
incrby aaa 10 aaa加10

mset k1 v1 k2 v2 k3 v3 设多个kv值
mget k1 k2 k3 得到多个k对应的v

strlen aaa 得到aaa值的长度length

Value为Hash类型命令使用
Hash类型 Map<String, Map<String,String>>
hset liaoning shengyang 1000
hset liaoning dalian 3333
keys *

hget liaoning shengyang
hgetall liaoning (返回 liaoning里的所有数据)
删除
hdel hebei shijiazhuang
hdel hebei qingdao
del hebei
hincrby hebei qingdao 5 qingdao加5
hincrby hebei qingdao 9
hdel hebei qingdao
del hebei

hmset hebei shijiazhuang 100 lf 200 xt 300
hmget hebei shijiazhuang lf xt

hexists he xt (hexists 是否存在)

hkeys hebei
hvals hebei
hlen hebei (hebei的value的length)

Value为List类型命令使用 list是有序可重复的
Redis的list使用的是linkedlist,linkedlist有两种方式:队列、堆栈。
在linkedlist中的头插法 和尾插法
队列中的名称: 入栈 push,出栈(弹栈) pop
lpush : 插入到队首
rpush: 插入到队尾

lrange 显示几个value -1 表示获取最后一个
127.0.0.1:6379> lrange list1 0 -1

弹出列表,则表示从列表中删除
127.0.0.1:6379> lpop list1
127.0.0.1:6379> rpop list1
获取列表长度
127.0.0.1:6379> llen list1
(integer) 8

Value为Set类型命令使用
Set Map<String,HashSet> 无序不能重复

sadd set1 1 2 2 3 3 4 5 (自动去重)

srem删除元素
127.0.0.1:6379> srem set1 3

判断元素是否存在
127.0.0.1:6379> sismember set1 3

smembers set1 取出全部成员

运算命令 差集 sdiff保留set1 中 与set2不重复的成员 属于A并且不属于B的元素构成的集合。
sdiff set1 set2

交集 属于A且属于B的元素构成的集合。
sinter set1 set2

并集 属于A或者属于B的元素构成的集合
sunion set1 set2

SortedSet(zset) Map<String,TreeSet> 不能重复可排序
score得分在前 member在后
zadd zset1 1 haha 3 hehe 2 heihei

zrange zset1 0 -1 取出 member
zrange zset1 0 -1 withscores 取出 member 和score

zrevrange zset1 0 -1 withscores 反排序 取出

zrem zset1 haha 删除

zscore zset1 haha 得到 haha的score

zrank zset1 hange 得到 hangge在升序排序的位置

zrevrank zset1 hange 得到hangge在降序排序的位置

zincrby zset1 100 hange hange的value增加100

Redis的scala的API

object StringValueDemo2 {
  def main(args: Array[String]): Unit = {

    val jedis: Jedis = new Jedis("192.168.133.201", 6379)
    //授权
    jedis.auth("123456")
    //选择DB
    jedis.select(0)
    //添加数据
    jedis.set("aaa", "111")
    //自增
    jedis.incr("aaa")

    val str: String = jedis.get("aaa")
    println(str)

    jedis.incrBy("aaa",100)
    val str2: String = jedis.get("aaa")
    println(str2)

    //关闭
    jedis.close()

  }

}

object ListValueDemo1 {
  def main(args: Array[String]): Unit = {

    val jedis: Jedis = new Jedis("192.168.133.201", 6379)
    jedis.auth("123456")
    jedis.select(0)

    //添加数据
    /*jedis.lpush("lst2", "1", "2", "3")
    jedis.lpush("lst2", "4", "5", "6")*/

    //插入数据 在数据"2"的后面插入一个数据 7
    //jedis.linsert("lst2",ListPosition.AFTER,"2","7")
    //删除count 个 value  删除2个 “7”
    jedis.lrem("lst2", 2, "7")

    val list: util.List[String] = jedis.lrange("lst2", 0, -1)

    import scala.collection.JavaConversions._
    for (e <- list) {
      println(e)
    }


  }

}


object HashValueDemo1 {
  def main(args: Array[String]): Unit = {

    val jedis: Jedis = new Jedis("192.168.133.201", 6379)
    //授权
    jedis.auth("123456")
    //选择DB
    jedis.select(0)


    jedis.hset("手机", "apple", "100")
    jedis.hset("手机", "华为", "800")
    jedis.hset("手机", "vivo", "500")

    jedis.hset("电脑", "联想", "300")
    jedis.hset("电脑", "小米", "800")
    jedis.hset("电脑", "华为", "700")

    jedis.hincrBy("手机", "华为", 100)

    val map1: util.Map[String, String] = jedis.hgetAll("手机")

    //导入隐式转换
    import scala.collection.JavaConversions._
    for (t <- map1){
      println(s"key: ${t._1} -> value: ${t._2}")
    }
    jedis.close()
  }
}

object SetValueDemo1 {

  def main(args: Array[String]): Unit = {

    val jedis: Jedis = new Jedis("192.168.133.201", 6379)
    //授权
    jedis.auth("123456")
    //选择DB
    jedis.select(0)

    //添加数据
    jedis.sadd("s1", "1", "2", "3", "4", "4", "5")
    jedis.sadd("s2", "3", "4", "6", "5")

    val sset: util.Set[String] = jedis.sdiff("s1", "s2")

    //导入隐式转换
    import scala.collection.JavaConversions._
    for (s <- sset){
      println(s)
    }
  }

}

object ZsetValueDemo {
  def main(args: Array[String]): Unit = {
    val jedis: Jedis = new Jedis("192.168.133.201", 6379)
    //授权
    jedis.auth("123456")
    //选择DB
    jedis.select(0)

    //zset是不能重复,但是可以排序的,按照得分进行排序
    /*jedis.zadd("z1", 5.5, "aaa")
    jedis.zadd("z1", 6.5, "bbb")
    jedis.zadd("z1", 3.5, "ccc")
*/
    //jedis.zincrby("z1", 4.0, "ccc")

    //val set1: util.Set[String] = jedis.zrevrange("z1", 0, -1)
    //同时取出得分
    val tuples: util.Set[Tuple] = jedis.zrevrangeWithScores("z1", 0, -1)

    import scala.collection.JavaConversions._
    for (s <- tuples){
      println(s.getElement +" , "+ s.getScore)
    }

  }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值