redis(一) 安装以及基本数据类型操作

redis安装和使用

redis安装

wget http://download.redis.io/redis-stable.tar.gz
tar zxvf redis-stable.tar.gz
cd redis-stable.tar.gz
make
make install

redis启动

redis-server
redis关闭
redis-cli shutdown

配置

方法一

redis-server /path/to/redis.conf
redis-server /path/to/redis.conf --loglevel warning //设置日志级别

方法二

redis-cli
redis > CONFIG SET loglevel warning

多数据库的选择

默认情况下,客户端自动选择0号数据库。
可以使用select命令来选择其他数据库。
> select 
redis不可以设置数据库的名称,数据库是通过编号来使用的。
redis只有一个全局的密码,不存在访问某个数据库的密码。

数据库基本操作

(1)添加数据和查找数据,通过set/get命令添加和获取数据

127.0.0.1:> select
OK
127.0.0.1:[]> set bar
OK
127.0.0.1:[]> get bar
""
127.0.0.1:[]> get aaa
(nil)

(2)判断一个键是否存在,exists命令可以判断key是否存在,存在返回1,不存在返回0

127.0.0.1:[]> exists bar
(integer)
127.0.0.1:[]> exists aaa
(integer)

(3)删除数据,del命令删除key,返回值为成功删除key的个数

127.0.0.1:[]> del aaa
(integer)
127.0.0.1:[]> del bar
(integer)

(4)获取value的类型

127.0.0.1:[]> set bar
OK
127.0.0.1:[]> type bar
string

(5)自增和自减,incr 、decr以及incrby和decrby实现整数的加减

127.0.0.1:[]> INCR ab
(integer)
127.0.0.1:[]> INCR ab
(integer)
127.0.0.1:[]> INCRBY ab
(integer)
127.0.0.1:[]> DECR ab
(integer)
127.0.0.1:[]> DECRBY ab
(integer)

(6)增加指定浮点数,incrbyfloat可以指定自增的浮点数

127.0.0.1:[]> INCRBYFLOAT ab 1.1
"2.1"

(7)向尾部追加,append命令可以向字符尾部追加内容

127.0.0.1:[]> set key hello
OK
127.0.0.1:[]> append key world
(integer)
127.0.0.1:[]> get key
"helloworld"

(8)获取字符串长度,strlen获取value的长度

127.0.0.1:[]> STRLEN key
(integer)

(9)批量设置和获取,通过mset和mget命令可以批量执行设置和获取

127.0.0.1:[]> mset key1 va1 key2 va2
OK
127.0.0.1:[]> mget key1 key2
) "va1"
) "va2"

(10)位操作

getbit key offset
setbit key offset
bitcount key [start] [end]
bitop operation destkey key [key ...]

散列类型

其实这里的散列类型就是类似于非结构化数据,json数据一样。
{
"id":,
"name":"test"
}

基本操作

(1)存储方法,可以通过hset和hget来设置和获取数据

127.0.0.1:[]> hset user id
(integer)
127.0.0.1:[]> hset user name test
(integer)
127.0.0.1:[]> hget user id
""
127.0.0.1:[]> hget user name
"test"

(2)判断字段是否存在,hexists命令,返回1存在,返回0不存在

127.0.0.1:[]> hexists user id
(integer)
127.0.0.1:[]> hexists user age
(integer)

(3)使用hsetnx(hset if not exists)如果不存在赋值

127.0.0.1:[]> hsetnx user age
(integer)
127.0.0.1:[]> hget user age
""

(4)增加数字

127.0.0.1:[]> hincrby user score
(integer)
127.0.0.1:[]> hget user score
""

(5)删除字段

127.0.0.1:[]> hdel user score
(integer)
127.0.0.1:[]> hget user score
(nil)

如何存储数据?

(1)使用散列类型存储数据,散列数据包括三部分(键、字段、字段值)
键           字段     字段值
post:id field value
127.0.0.1:[]> incr userid
(integer)
127.0.0.1:[]> hset user: name test
(integer)
127.0.0.1:[]> hset user: score
(integer)
127.0.0.1:[]> incr userid
(integer)
127.0.0.1:[]> hset user: name test2
(integer)
127.0.0.1:[]> hset user: score
(integer)

添加了两条数据,id为1的名字为test分数为90,而id为2的名字为test2分数为90.

(2)获取多个字段的数据,需要使用hmget命令,并制定字段名称
127.0.0.1:[]> hmget user: name score
) "test"
) ""
(3)获取一行数据,不需要指定字段名称,只需要指出键名
127.0.0.1:[]> hgetall user:
) "name"
) "test2"
) "score"
) ""
(4)只获取字段名或字段值
127.0.0.1:[]> hkeys user:
) "name"
) "score"
127.0.0.1:[]> hvals user:
) "test"
) ""
(5)获取字段数量
127.0.0.1:[]> hlen user:
(integer)
需要注意的是,散列类型无法获取所有存在的键值,也就是id,如果删除了中间某个id的话,只可以使用exist命令来判断key是否存在。

列表类型

类表类型解决了上述的问题。
类表类型是有序的,值是可以重复的。
列表类型是通过双向链表实现的,向列表两端添加元素的时间复杂度为O(1),获取两端元素的速度也是最快。

基本操作

列表的基本操作命令都是以l开头的。

(1)添加和弹出元素使用lpush和rpush以及lpop和rpop分别从列表的左侧和右侧添加和删除元素。
127.0.0.1:> lpush user test
(integer)
127.0.0.1:> rpush user test1
(integer)
127.0.0.1:> lpop user
"test"
127.0.0.1:> rpop user
"test1"
127.0.0.1:>
(2)llen查看元素个数
127.0.0.1:> llen user
(integer)
127.0.0.1:> lpush user test
(integer)
127.0.0.1:> llen user
(integer)
(3)获取列表片段
127.0.0.1:> lrange user
) "test"
) "test1"
) "test2"
) "test3"
127.0.0.1:> lrange user
) "test"
) "test1"
) "test2"
(4)从列表中删除元素
lrem     key     count     value
@count 为删除个数,大于0的话从左边开始,小于0的话从右边开始
@value 要删除的值

我们可以把数据的id存储在列表中,当某一行数据被删除时候,只需要删除为该value为key即可,而查询数据的时候,需要先从列表中读取所有的id,再从散列表中读取数据。

 
(5)获取和设置索引元素值
 
(6)向列表中插入元素
127.0.0.1:> lrange user  -
) "test"
) "test1"
) "test2"
) "test3"
127.0.0.1:> linsert user before test1 test0
(integer)
127.0.0.1:> linsert user after test1 test1.
(integer)
127.0.0.1:> lrange user -
) "test"
) "test0"
) "test1"
) "test1.5"
) "test2"
) "test3"
(7)将元素从一个列表转移到另外一个列表
rdroplpush     source     destination
从source列表的右侧弹出一个数据,添加到destination列表的左侧

集合类型

集合中不允许重复数据的出现,数据是唯一的,无序的。
空的散列表的HASH TABLE实现,因此操作时间复杂度为O(1)。
(1)增加sadd和删除srem、获取所有元素smembers,返回值标识成功添加元素的数量:
127.0.0.1:> sadd key
(integer)
127.0.0.1:> sadd key
(integer)
127.0.0.1:> sadd key
(integer)
127.0.0.1:> smembers key
) ""
) ""
127.0.0.1:> srem key
(integer)
127.0.0.1:> smembers key
) ""
(2)判断元素是否在集合中可以使用sismember命令。
127.0.0.1:> sismember key
(integer)
127.0.0.1:> sismember key
(integer)
(3)集合运算
sdiff      key     [key...]
sinter key [key...]
sunion key [key...]
(4)获取元素个数
127.0.0.1:> scard key
(integer)
(5)集合运算并保存结果
sdiffstore       destination     key [key...]
sinterstore destination key[key...]
sunionstore destination key[key...]
(6)随机获取集合的元素
srandmember key [count]
127.0.0.1:> srandmember key
) ""
) ""
) ""
需要注意,srandmember取到的随机元素在集合比较小的情况下并不是完全随机的,由于redis的存储方法是利用哈希桶+数据链的存储方式,当桶和每个桶内元素的个数都非常小时就会造成取到相同数据的情况。

有序集合类型 sorted set

与普通的集合类型相比,有序集合为集合中的每一个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合的基本操作,还能够得到分数最高(或最低)的前n个元素、获得指定分数范围内的元素等与分有关的操作,虽然集合中的元素必须是不同的,但是其分数是可以相同的。
 
有序结合和列表的使用区别:
(1)列表类型是通过链来实现的,获取靠近两端数据的速度极快,而当元素增多后,访问中间元素的数据就会变慢,所以她更适合实现如“新鲜事”或“日志”这样少访问中间元素的应用。
(2)有序集合类型是使用散列和跳跃表实现的,所以即使读取位于中间部分数据的速度也很快(时间复杂度为O(log(n)))。
(3)列表中不能简单地调整某个元素的位置,但有序集合可以通过调整分数来实现位置的调整。
(4)有序集合更加消耗内存。

基本操作

(1)zadd添加元素,并设置分数score

127.0.0.1:> zadd students  xiaoming
(integer)
127.0.0.1:> zadd students daxiong
(integer)
(2)zscore获取元素分数
127.0.0.1:> zscore students xiaoming
""
(3)获取排名在某个范围的列表,元素是从0开始的
127.0.0.1:> zrange students
) "xiaoming"
) "daxiong"
(4)获取指定分数范围的元素,用于筛选数据
127.0.0.1:> zrangebyscore students
) "xiaoming"
127.0.0.1:> zrangebyscore students
) "xiaoming"
) "daxiong"
limit命令可以实现sql语句中的Limit效果
获取从0开始的前2个数据
127.0.0.1:> zrangebyscore students limit
) "xiaoming"
) "daxiong"
获取从1开始的前2个数据
127.0.0.1:> zrangebyscore students limit
) "daxiong"
(5)增加和减少某个元素的分数
127.0.0.1:> zincrby students  xiaoming
""
127.0.0.1:> zincrby students - xiaoming
""
(6)获取集合中元素个数
127.0.0.1:> zcard students
(integer)
(7)获取指定分数范围内的元素个数
zcount     key     min     max

127.0.0.1:> zcount students
(integer)
127.0.0.1:> zcount students
(integer)
(8)删除一个或多个元素
zrem     key     [key...]
(9)按照排名范围来删除元素
zremrangebyrank     key     start     stop
(10)按照分数范围来删除元素
zremrangebyscore     key     min     max
(11)获取元素的排名,注意元素从0开始排序
127.0.0.1:> zrank students xiaoming
(integer)

参考

redis入门指南

http://redis.readthedocs.org/en/latest/

redis(一) 安装以及基本数据类型操作的更多相关文章

  1. Redis:安装、配置、操作和简单代码实例(C语言Client端)

    Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...

  2. Redis快速入门:安装、配置和操作

    本文是有关Redis的系列技术文章之一.在之前的文章中介绍了<Redis快速入门:初识Redis>,对Redis有了一个初步的了解.今天继续为大家介绍Redis如何安装.配置和操作. 系列 ...

  3. Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)

    1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...

  4. 缓存系列之三:redis安装及基本数据类型命令使用

    一:Redis是一个开源的key-value存储系统.与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串.哈希表.链表.集合.有序集合以及基于这些数据类型的相关操 ...

  5. redis的安装使用以及在python中操作redis

    一.Redis介绍: Redis可以看作是一个key-value的存储系统,它为我们提供了丰富的数据结构,包括lists,sets,ordered sets和hashes.还包括了对这些数据结构的丰富 ...

  6. redis安装启动和数据操作

    redis安装和启动 1.安装包下载地址 >> redis基本数据类型 string(字符串和数值) .list(列表/队列).hashmap(哈希表[键唯一]). set(集合[值唯一] ...

  7. redis基础:redis下载安装与配置,redis数据类型使用,redis常用指令,jedis使用,RDB和AOF持久化

    知识点梳理 课堂讲义 课程计划 1. REDIS 入 门 (了解) (操作)   2. 数据类型 (重点) (操作) (理解) 3. 常用指令   (操作)   4. Jedis (重点) (操作) ...

  8. 大数据学习day31------spark11-------1. Redis的安装和启动,2 redis客户端 3.Redis的数据类型 4. kafka(安装和常用命令)5.kafka java客户端

    1. Redis Redis是目前一个非常优秀的key-value存储系统(内存的NoSQL数据库).和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list ...

  9. windows下Redis安装及利用java操作Redis

    一.windows下Redis安装 1.Redis下载 下载地址:https://github.com/MicrosoftArchive/redis 打开下载地址后,选择版本 然后选择压缩包 下载 R ...

随机推荐

  1. freeCodeCamp:Caesars Cipher

    让上帝的归上帝,凯撒的归凯撒. 下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码. 移位密码也就是密码中的字母会按照指定的数量来做移位. 一个常见的案例就是ROT13密码,字母 ...

  2. JS组件系列——封装自己的JS组件

    前言:之前分享了那么多bootstrap组件的使用经验,这篇博主打算研究下JS组件的扩展和封装,我们来感受下JQuery为我们提供$.Extend的神奇,看看我们怎么自定义自己的组件,比如我们想扩展一 ...

  3. Mysql监控、优化

    一.查询语句的生命周期 1.MYSQL服务器监听3306端口 2.验证访问用户 3.创建MySQL线程 4.检查内存(Qcache),当查询命中缓存,MYSQL立刻返回结果,跳过解析.优化.执行阶段. ...

  4. STL库的内存配置器(allocator)

    正在学习中,如果有错,还请多多指教,根据不断的理解,会进行更改,更改之前的样子都会保留下来,记录错误是最大的进步,嗯嗯! 具有次配置力的SGI空间配置器(SGI是STL的一种版本,也有其他的版本) 这 ...

  5. 正确获得android设备的IP地址

    网上此类获得android设备IP地址相关的文章有不少,有一篇是比较通用的,但有一个问题:有些设备默认的是IPv6的地址,那段代码获得的就是IPv6的地址.但这显然不是我们想要的,我们需要的是IPv4 ...

  6. javaweb中实现在线人数统计

    session并不是浏览器关闭时销毁的,而是在session失效的时候销毁下列代码就是监测session创建.销毁 package com.my.count; import javax.servlet ...

  7. Linux Memcache 安装配置

    mkdir /soft cd /soft wget http://memcached.org/files/memcached-1.4.29.tar.gz tar -zxvf memcached-.ta ...

  8. MAT-Java内存分析工具

    对Mat工具的详细介绍,引用博文:http://my.oschina.net/biezhi/blog/286223 下载地址:http://www.eclipse.org/mat/downloads. ...

  9. [Python] Removing a non-empty folder

    Removing a non-empty folder You will get an ‘access is denied’ error when you attempt to use os.remo ...

  10. if else 的令人防不胜防的奇葩错误

    if(a==t && b+c >a)  else flag=false; 这个语句乍一看没什么问题,如果a==t 成立b+c >a不成立-〉flag=false; 但是编译 ...